ローカルの SQLite.NET データベースにデータを格納するStore Data in a Local SQLite.NET Database

サンプルのダウンロードサンプルをダウンロードします。Download Sample Download the sample

このクイックスタートでは、次の方法について説明します。In this quickstart, you will learn how to:

  • Nuget パッケージマネージャーを使用して、NuGet パッケージをプロジェクトに追加します。Use the NuGet Package Manager to add a NuGet package to a project.
  • データを SQLite.NET データベースにローカルに格納します。Store data locally in a SQLite.NET database.

クイックスタートでは、ローカルの SQLite.NET データベースにデータを格納する方法について説明します。The quickstart walks through how to store data in a local SQLite.NET database. 最終的なアプリケーションは、次のとおりです。The final application is shown below:

)

必須コンポーネントPrerequisites

このクイックスタートを試行する前に、前のクイックスタートを正常に完了している必要があります。You should successfully complete the previous quickstart before attempting this quickstart. または、前のクイックスタートサンプルをダウンロードし、このクイックスタートの出発点として使用してください。Alternatively, download the previous quickstart sample and use it as the starting point for this quickstart.

Visual Studio でアプリを更新するUpdate the app with Visual Studio

  1. Visual Studio を起動し、Note ソリューションを開きます。Launch Visual Studio and open the Notes solution.

  2. ソリューションエクスプローラーで、メモプロジェクトを選択し、右クリックして [NuGet パッケージの管理...] を選択します。In Solution Explorer, select the Notes project, right-click and select Manage NuGet Packages...:

  3. NuGet パッケージ マネージャーで、 [参照] タブを選択し、pcl-sqlite-net NuGet パッケージを検索して選択し、 [インストール] ボタンをクリックしてプロジェクトに追加します。In the NuGet Package Manager, select the Browse tab, search for the sqlite-net-pcl NuGet package, select it, and click the Install button to add it to the project:

    注意

    類似した名前を持つ NuGet パッケージが多数あります。There are a number of NuGet packages with similar names. 正しいパッケージには、次の属性があります。The correct package has these attributes:

    • 作成者: Frank A. KruegerAuthor(s): Frank A. Krueger
    • ID: sqlite-net-pclId: sqlite-net-pcl
    • NuGet リンク: sqlite-net-pclNuGet link: sqlite-net-pcl

    パッケージ名に関係なく、この NuGet パッケージは .NET Standard プロジェクトで使用できます。Despite the package name, this NuGet package can be used in .NET Standard projects.

    このパッケージは、データベース操作をアプリケーションに組み込むために使用されます。This package will be used to incorporate database operations into the application.

  4. ソリューションエクスプローラーNotesプロジェクトで、 [モデル] フォルダーのNote.csを開き、既存のコードを次のコードに置き換えます。In Solution Explorer, in the Notes project, open Note.cs in the Models folder and replace the existing code with the following code:

    using System;
    using SQLite;
    
    namespace Notes.Models
    {
        public class Note
        {
            [PrimaryKey, AutoIncrement]
            public int ID { get; set; }
            public string Text { get; set; }
            public DateTime Date { get; set; }
        }
    }
    

    このクラスは、 Noteアプリケーションの各メモに関するデータを格納するモデルを定義します。This class defines a Note model that will store data about each note in the application. プロパティは、SQLite.NET データベースPrimaryKeyAutoIncrementの各Noteインスタンスが SQLite.NET によって提供される一意の id を持つように、属性と属性でマークされます。 IDThe ID property is marked with PrimaryKey and AutoIncrement attributes to ensure that each Note instance in the SQLite.NET database will have a unique id provided by SQLite.NET.

    CTRL + Sキーを押してNote.csへの変更内容を保存し、ファイルを閉じます。Save the changes to Note.cs by pressing CTRL+S, and close the file.

    警告

    この時点でアプリケーションをビルドしようとすると、後続の手順で修正されるエラーが発生します。Attempting to build the application at this point will result in errors that will be fixed in subsequent steps.

  5. ソリューションエクスプローラーで、 NotesプロジェクトにDataという名前の新しいフォルダーを追加します。In Solution Explorer, add a new folder named Data to the Notes project.

  6. ソリューションエクスプローラーNotesプロジェクトで、note databaseという名前の新しいクラスをDataフォルダーに追加します。In Solution Explorer, in the Notes project, add a new class named NoteDatabase to the Data folder.

  7. NoteDatabase.csで、既存のコードを次のコードに置き換えます。In NoteDatabase.cs, replace the existing code with the following code:

    using System.Collections.Generic;
    using System.Threading.Tasks;
    using SQLite;
    using Notes.Models;
    
    namespace Notes.Data
    {
        public class NoteDatabase
        {
            readonly SQLiteAsyncConnection _database;
    
            public NoteDatabase(string dbPath)
            {
                _database = new SQLiteAsyncConnection(dbPath);
                _database.CreateTableAsync<Note>().Wait();
            }
    
            public Task<List<Note>> GetNotesAsync()
            {
                return _database.Table<Note>().ToListAsync();
            }
    
            public Task<Note> GetNoteAsync(int id)
            {
                return _database.Table<Note>()
                                .Where(i => i.ID == id)
                                .FirstOrDefaultAsync();
            }
    
            public Task<int> SaveNoteAsync(Note note)
            {
                if (note.ID != 0)
                {
                    return _database.UpdateAsync(note);
                }
                else
                {
                    return _database.InsertAsync(note);
                }
            }
    
            public Task<int> DeleteNoteAsync(Note note)
            {
                return _database.DeleteAsync(note);
            }
        }
    }
    

    このクラスには、データベースを作成し、そこからデータを読み取り、データを書き込んでからデータを削除するためのコードが含まれています。This class contains code to create the database, read data from it, write data to it, and delete data from it. このコードでは、データベース操作をバックグラウンドのスレッドに移動する非同期 SQLite.Net API が使用されています。The code uses asynchronous SQLite.NET APIs that move database operations to background threads. さらに、NoteDatabase コンストラクターがデータベース ファイルのパスを引数として受け取ります。In addition, the NoteDatabase constructor takes the path of the database file as an argument. このパスは、次の手順Appでクラスによって提供されます。This path will be provided by the App class in the next step.

    CTRL + Sキーを押してNoteDatabase.csへの変更内容を保存し、ファイルを閉じます。Save the changes to NoteDatabase.cs by pressing CTRL+S, and close the file.

    警告

    この時点でアプリケーションをビルドしようとすると、後続の手順で修正されるエラーが発生します。Attempting to build the application at this point will result in errors that will be fixed in subsequent steps.

  8. ソリューションエクスプローラーNotesプロジェクトで、 App.xaml.csをダブルクリックして開きます。In Solution Explorer, in the Notes project, double-click App.xaml.cs to open it. 次に、既存のコードを次のコードに置き換えます。Then replace the existing code with the following code:

    using System;
    using System.IO;
    using Xamarin.Forms;
    using Notes.Data;
    
    namespace Notes
    {
        public partial class App : Application
        {
            static NoteDatabase database;
    
            public static NoteDatabase Database
            {
                get
                {
                    if (database == null)
                    {
                        database = new NoteDatabase(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), "Notes.db3"));
                    }
                    return database;
                }
            }
    
            public App()
            {
                InitializeComponent();
                MainPage = new NavigationPage(new NotesPage());
            }
    
            protected override void OnStart()
            {
                // Handle when your app starts
            }
    
            protected override void OnSleep()
            {
                // Handle when your app sleeps
            }
    
            protected override void OnResume()
            {
                // Handle when your app resumes
            }
        }
    }
    

    このコードは、 Database新しいNoteDatabaseインスタンスをシングルトンとして作成し、データベースのファイル名をコンストラクターのNoteDatabase引数として渡すプロパティを定義します。This code defines a Database property that creates a new NoteDatabase instance as a singleton, passing in the filename of the database as the argument to the NoteDatabase constructor. データベースをシングルトンとして公開することの利点は、アプリケーションが実行されている間、開いたままになる単一のデータベース接続が作成されることです。そのため、データベース操作が実行されるときにデータベース ファイルを毎回開いて閉じる労力を避けることができます。The advantage of exposing the database as a singleton is that a single database connection is created that's kept open while the application runs, therefore avoiding the expense of opening and closing the database file each time a database operation is performed.

    CTRL + S を押し、App.xaml.cs への変更内容を保存してから、ファイルを閉じます。Save the changes to App.xaml.cs by pressing CTRL+S, and close the file.

    警告

    この時点でアプリケーションをビルドしようとすると、後続の手順で修正されるエラーが発生します。Attempting to build the application at this point will result in errors that will be fixed in subsequent steps.

  9. ソリューションエクスプローラーNotesプロジェクトで、 NotesPage.xaml.csをダブルクリックして開きます。In Solution Explorer, in the Notes project, double-click NotesPage.xaml.cs to open it. 次に、 OnAppearingメソッドを次のコードに置き換えます。Then replace the OnAppearing method with the following code:

    protected override async void OnAppearing()
    {
        base.OnAppearing();
    
        listView.ItemsSource = await App.Database.GetNotesAsync();
    }
    

    このコードは、 ListViewデータベースに格納されているすべてのメモをに設定します。This code populates the ListView with any notes stored in the database.

    CTRL + Sキーを押してNotesPage.xaml.csへの変更内容を保存し、ファイルを閉じます。Save the changes to NotesPage.xaml.cs by pressing CTRL+S, and close the file.

    警告

    この時点でアプリケーションをビルドしようとすると、後続の手順で修正されるエラーが発生します。Attempting to build the application at this point will result in errors that will be fixed in subsequent steps.

  10. ソリューションエクスプローラーで、 [NoteEntryPage.xaml.cs] をダブルクリックして開きます。In Solution Explorer, double-click NoteEntryPage.xaml.cs to open it. 次に、 OnSaveButtonClickedメソッドOnDeleteButtonClickedとメソッドを次のコードに置き換えます。Then replace the OnSaveButtonClicked and OnDeleteButtonClicked methods with the following code:

    async void OnSaveButtonClicked(object sender, EventArgs e)
    {
        var note = (Note)BindingContext;
        note.Date = DateTime.UtcNow;
        await App.Database.SaveNoteAsync(note);
        await Navigation.PopAsync();
    }
    
    async void OnDeleteButtonClicked(object sender, EventArgs e)
    {
        var note = (Note)BindingContext;
        await App.Database.DeleteNoteAsync(note);
        await Navigation.PopAsync();
    }
    

    NoteEntryPage Note BindingContext 1 つのノートを表すインスタンスをページのに格納します。The NoteEntryPage stores a Note instance, which represents a single note, in the BindingContext of the page. イベントハンドラーが実行Noteされると、インスタンスがデータベースに保存され、アプリケーションは前のページに戻ります。 OnSaveButtonClickedWhen the OnSaveButtonClicked event handler is executed, the Note instance is saved to the database and the application navigates back to the previous page. イベントハンドラーが実行Noteされると、インスタンスがデータベースから削除され、アプリケーションが前のページに戻ります。 OnDeleteButtonClickedWhen the OnDeleteButtonClicked event handler is executed, the Note instance is deleted from the database and the application navigates back to the previous page.

    CTRL + Sキーを押してNoteEntryPage.xaml.csへの変更内容を保存し、ファイルを閉じます。Save the changes to NoteEntryPage.xaml.cs by pressing CTRL+S, and close the file.

  11. 各プラットフォームでプロジェクトをビルドして実行します。Build and run the project on each platform. 詳細については、「クイックスタートのビルド」を参照してください。For more information, see Building the quickstart.

    [ノート] ページで、 + ボタンを押してNoteEntryPageに移動し、メモを入力します。On the NotesPage press the + button to navigate to the NoteEntryPage and enter a note. メモを保存すると、アプリケーションは [ノート ] ページに戻ります。After saving the note the application will navigate back to the NotesPage.

    さまざまな長さのメモを入力して、アプリケーションの動作を観察します。Enter a number of notes, of varying length, to observe the application behavior.

Visual Studio for Mac でアプリを更新するUpdate the app with Visual Studio for Mac

  1. Visual Studio for Mac を起動し、Notes プロジェクトを開きます。Launch Visual Studio for Mac and open the Notes project.

  2. Solution Padで、メモプロジェクトを選択して右クリックし、[追加] > [NuGet パッケージの追加] の順に選択します。In the Solution Pad, select the Notes project, right-click and select Add > Add NuGet Packages...:

  3. [パッケージを追加] ウィンドウで、sqlite-net-pcl NuGet パッケージを検索して選択し、 [パッケージを追加] ボタンをクリックしてプロジェクトに追加します。In the Add Packages window, search for the sqlite-net-pcl NuGet package, select it, and click the Add Package button to add it to the project:

    注意

    類似した名前を持つ NuGet パッケージが多数あります。There are a number of NuGet packages with similar names. 正しいパッケージには、次の属性があります。The correct package has these attributes:

    • 作成者: Frank A. KruegerAuthor: Frank A. Krueger
    • ID: sqlite-net-pclId: sqlite-net-pcl
    • NuGet リンク: sqlite-net-pclNuGet link: sqlite-net-pcl

    パッケージ名に関係なく、この NuGet パッケージは .NET Standard プロジェクトで使用できます。Despite the package name, this NuGet package can be used in .NET Standard projects.

    このパッケージは、データベース操作をアプリケーションに組み込むために使用されます。This package will be used to incorporate database operations into the application.

  4. Solution PadNotesプロジェクトで、 [モデル] フォルダーのNote.csを開き、既存のコードを次のコードに置き換えます。In the Solution Pad, in the Notes project, open Note.cs in the Models folder and replace the existing code with the following code:

    using System;
    using SQLite;
    
    namespace Notes.Models
    {
        public class Note
        {
            [PrimaryKey, AutoIncrement]
            public int ID { get; set; }
            public string Text { get; set; }
            public DateTime Date { get; set; }
        }
    }
    

    このクラスは、 Noteアプリケーションの各メモに関するデータを格納するモデルを定義します。This class defines a Note model that will store data about each note in the application. プロパティは、SQLite.NET データベースPrimaryKeyAutoIncrementの各Noteインスタンスが SQLite.NET によって提供される一意の id を持つように、属性と属性でマークされます。 IDThe ID property is marked with PrimaryKey and AutoIncrement attributes to ensure that each Note instance in the SQLite.NET database will have a unique id provided by SQLite.NET.

    [ファイル > 保存] を選択し (または ⌘ + Sキーを押して)、 Note.csへの変更内容を保存してから、ファイルを閉じます。Save the changes to Note.cs by choosing File > Save (or by pressing ⌘ + S), and close the file.

    警告

    この時点でアプリケーションをビルドしようとすると、後続の手順で修正されるエラーが発生します。Attempting to build the application at this point will result in errors that will be fixed in subsequent steps.

  5. Solution Padで、 NotesプロジェクトにDataという名前の新しいフォルダーを追加します。In the Solution Pad, add a new folder named Data to the Notes project.

  6. Solution Padの Notes プロジェクトで、 note databaseという名前の新しいクラスをDataフォルダーに追加します。In the Solution Pad, in the Notes project, add a new class named NoteDatabase to the Data folder.

  7. NoteDatabase.csで、既存のコードを次のコードに置き換えます。In NoteDatabase.cs, replace the existing code with the following code:

    using System.Collections.Generic;
    using System.Threading.Tasks;
    using SQLite;
    using Notes.Models;
    
    namespace Notes.Data
    {
        public class NoteDatabase
        {
            readonly SQLiteAsyncConnection _database;
    
            public NoteDatabase(string dbPath)
            {
                _database = new SQLiteAsyncConnection(dbPath);
                _database.CreateTableAsync<Note>().Wait();
            }
    
            public Task<List<Note>> GetNotesAsync()
            {
                return _database.Table<Note>().ToListAsync();
            }
    
            public Task<Note> GetNoteAsync(int id)
            {
                return _database.Table<Note>()
                                .Where(i => i.ID == id)
                                .FirstOrDefaultAsync();
            }
    
            public Task<int> SaveNoteAsync(Note note)
            {
                if (note.ID != 0)
                {
                    return _database.UpdateAsync(note);
                }
                else
                {
                    return _database.InsertAsync(note);
                }
            }
    
            public Task<int> DeleteNoteAsync(Note note)
            {
                return _database.DeleteAsync(note);
            }
        }
    }
    

    このクラスには、データベースを作成し、そこからデータを読み取り、データを書き込んでからデータを削除するためのコードが含まれています。This class contains code to create the database, read data from it, write data to it, and delete data from it. このコードでは、データベース操作をバックグラウンドのスレッドに移動する非同期 SQLite.Net API が使用されています。The code uses asynchronous SQLite.NET APIs that move database operations to background threads. さらに、NoteDatabase コンストラクターがデータベース ファイルのパスを引数として受け取ります。In addition, the NoteDatabase constructor takes the path of the database file as an argument. このパスは、次の手順Appでクラスによって提供されます。This path will be provided by the App class in the next step.

    [ファイル > 保存] を選択し (または ⌘ + Sキーを押して)、 NoteDatabase.csへの変更内容を保存してから、ファイルを閉じます。Save the changes to NoteDatabase.cs by choosing File > Save (or by pressing ⌘ + S), and close the file.

    警告

    この時点でアプリケーションをビルドしようとすると、後続の手順で修正されるエラーが発生します。Attempting to build the application at this point will result in errors that will be fixed in subsequent steps.

  8. Solution PadNotesプロジェクトで、 App.xaml.csをダブルクリックして開きます。In the Solution Pad, in the Notes project, double-click App.xaml.cs to open it. 次に、既存のコードを次のコードに置き換えます。Then replace the existing code with the following code:

    using System;
    using System.IO;
    using Xamarin.Forms;
    using Notes.Data;
    
    namespace Notes
    {
        public partial class App : Application
        {
            static NoteDatabase database;
    
            public static NoteDatabase Database
            {
                get
                {
                    if (database == null)
                    {
                        database = new NoteDatabase(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), "Notes.db3"));
                    }
                    return database;
                }
            }
    
            public App()
            {
                InitializeComponent();
                MainPage = new NavigationPage(new NotesPage());
            }
    
            protected override void OnStart()
            {
                // Handle when your app starts
            }
    
            protected override void OnSleep()
            {
                // Handle when your app sleeps
            }
    
            protected override void OnResume()
            {
                // Handle when your app resumes
            }
        }
    }
    

    このコードは、 Database新しいNoteDatabaseインスタンスをシングルトンとして作成し、データベースのファイル名をコンストラクターのNoteDatabase引数として渡すプロパティを定義します。This code defines a Database property that creates a new NoteDatabase instance as a singleton, passing in the filename of the database as the argument to the NoteDatabase constructor. データベースをシングルトンとして公開することの利点は、アプリケーションが実行されている間、開いたままになる単一のデータベース接続が作成されることです。そのため、データベース操作が実行されるときにデータベース ファイルを毎回開いて閉じる労力を避けることができます。The advantage of exposing the database as a singleton is that a single database connection is created that's kept open while the application runs, therefore avoiding the expense of opening and closing the database file each time a database operation is performed.

    [ファイル]、[保存] の順に選択し (または ⌘ + S キーを押し)、App.xaml.cs への変更内容を保存してから、ファイルを閉じます。Save the changes to App.xaml.cs by choosing File > Save (or by pressing ⌘ + S), and close the file.

    警告

    この時点でアプリケーションをビルドしようとすると、後続の手順で修正されるエラーが発生します。Attempting to build the application at this point will result in errors that will be fixed in subsequent steps.

  9. Solution PadNotesプロジェクトで、 NotesPage.xaml.csをダブルクリックして開きます。In the Solution Pad, in the Notes project, double-click NotesPage.xaml.cs to open it. 次に、 OnAppearingメソッドを次のコードに置き換えます。Then replace the OnAppearing method with the following code:

    protected override async void OnAppearing()
    {
        base.OnAppearing();
    
        listView.ItemsSource = await App.Database.GetNotesAsync();
    }
    

    このコードは、 ListViewデータベースに格納されているすべてのメモをに設定します。This code populates the ListView with any notes stored in the database.

    [ファイル > 保存] を選択し (または ⌘ + Sキーを押して)、 NotesPage.xaml.csへの変更内容を保存してから、ファイルを閉じます。Save the changes to NotesPage.xaml.cs by choosing File > Save (or by pressing ⌘ + S), and close the file.

    警告

    この時点でアプリケーションをビルドしようとすると、後続の手順で修正されるエラーが発生します。Attempting to build the application at this point will result in errors that will be fixed in subsequent steps.

  10. Solution Padで、 [NoteEntryPage.xaml.cs] をダブルクリックして開きます。In the Solution Pad, double-click NoteEntryPage.xaml.cs to open it. 次に、 OnSaveButtonClickedメソッドOnDeleteButtonClickedとメソッドを次のコードに置き換えます。Then replace the OnSaveButtonClicked and OnDeleteButtonClicked methods with the following code:

    async void OnSaveButtonClicked(object sender, EventArgs e)
    {
        var note = (Note)BindingContext;
        note.Date = DateTime.UtcNow;
        await App.Database.SaveNoteAsync(note);
        await Navigation.PopAsync();
    }
    
    async void OnDeleteButtonClicked(object sender, EventArgs e)
    {
        var note = (Note)BindingContext;
        await App.Database.DeleteNoteAsync(note);
        await Navigation.PopAsync();
    }
    

    NoteEntryPage Note BindingContext 1 つのノートを表すインスタンスをページのに格納します。The NoteEntryPage stores a Note instance, which represents a single note, in the BindingContext of the page. イベントハンドラーが実行Noteされると、インスタンスがデータベースに保存され、アプリケーションは前のページに戻ります。 OnSaveButtonClickedWhen the OnSaveButtonClicked event handler is executed, the Note instance is saved to the database and the application navigates back to the previous page. イベントハンドラーが実行Noteされると、インスタンスがデータベースから削除され、アプリケーションが前のページに戻ります。 OnDeleteButtonClickedWhen the OnDeleteButtonClicked event handler is executed, the Note instance is deleted from the database and the application navigates back to the previous page.

    [ファイル > 保存] を選択し (または ⌘ + Sキーを押して)、 NoteEntryPage.xaml.csへの変更内容を保存してから、ファイルを閉じます。Save the changes to NoteEntryPage.xaml.cs by choosing File > Save (or by pressing ⌘ + S), and close the file.

  11. 各プラットフォームでプロジェクトをビルドして実行します。Build and run the project on each platform. 詳細については、「クイックスタートのビルド」を参照してください。For more information, see Building the quickstart.

    [ノート] ページで、 + ボタンを押してNoteEntryPageに移動し、メモを入力します。On the NotesPage press the + button to navigate to the NoteEntryPage and enter a note. メモを保存すると、アプリケーションは [ノート ] ページに戻ります。After saving the note the application will navigate back to the NotesPage.

    さまざまな長さのメモを入力して、アプリケーションの動作を観察します。Enter a number of notes, of varying length, to observe the application behavior.

次の手順Next steps

このクイックスタートでは、次の方法について学習しました。In this quickstart, you learned how to:

  • Nuget パッケージマネージャーを使用して、NuGet パッケージをプロジェクトに追加します。Use the NuGet Package Manager to add a NuGet package to a project.
  • データを SQLite.NET データベースにローカルに格納します。Store data locally in a SQLite.NET database.

XAML スタイルを使用してアプリケーションのスタイルを適用するには、次のクイックスタートに進みます。To style the application with XAML styles, continue to the next quickstart.