SQLiteによるデータベースUWP開発

06 February 2016
#CSharp#UWP#SQLite

ローカルデータベースを使用したUWPアプリケーション開発において、データベースにSQLiteを使用することが可能です。

本記事では、SQLite.NETを用いてSQLiteを使用する手順を示します。

インストール

SQLiteのダウンロードページからUniversal App PlatformのVSIXパッケージ(sqlite-uap-****.vsix)をダウンロード&インストールします。

bandicam 2016-02-04 09-34-34-554

ソリューションエクスプローラ→参照→参照の追加で参照マネージャーを開き、Universal Windows→拡張から次の2つを追加します。

  • SQLite for Universal App Platfrom
  • Visual C++ 2015 Runtime for Universal Windows Platform Apps
bandicam 2016-02-04 09-38-05-393

ソリューションエクスプローラ→参照→NuGetパッケージの管理でNuGetマネージャーを開き、SQLite.NET PCLをインストールします。

bandicam 2016-02-04 09-44-23-168

以上でライブラリのインストールは終了です。

サンプルコード

データベースを使用したサンプルとして、ここでは商品情報をデータベースで管理することを考えます。

まず、商品情報を表すProductクラスを次のように定義します。

using SQLite.Net.Attributes;

class Product
{
    [PrimaryKey, AutoIncrement]
    public int Id { get; set; }

    public string Title { get; set; }
}

Productクラスはint型のIdプロパティとstring型のTitleプロパティを持ちます。

Idプロパティには、PrimaryKeyとAutoIncrementの属性を付加しています。これは、Idプロパティが主キーであると同時に、データベース格納時に自動的に値が設定されることを示しています。 すなわち、Productクラスはデータベースのテーブル定義として利用されます。

次に、Productクラスをデータベースで管理する一連のコードを示します。

using SQLite.Net;
using SQLite.Net.Platform.WinRT;

// コネクションの作成
string storagePath = Path.Combine(ApplicationData.Current.LocalFolder.Path, "Storage.sqlite");
using (var db = new SQLiteConnection(new SQLitePlatformWinRT(), storagePath))
{
    // テーブルの作成
    db.CreateTable<Product>();

    // テーブル情報の取得
    var info = db.GetMapping(typeof(Product));

    // データの挿入
    Product product = new Product() { Title = "Hoge" };
    db.Insert(product);

    // データの取得
    var items = db.Table<Product>().Where(x => x.Id == 1);

    // データの更新
    product.Title = "Fuga";
    db.Update(product);

    // データの削除1 (オブジェクトの指定)
    db.Delete(product);

    // データの削除2 (条件の指定)
    db.Execute("DELETE FROM Person WHERE Id = ?", product.Id);
}

データベースとのコネクションを接続するために、SQLiteConnectionクラスのインスタンスを生成します。SQLiteConnectionクラスのコンストラクタには、プラットフォームの種類とデータベースの場所を指定します。

データベースにテーブルを定義するには、CreateTable<>()メソッドを使用します。また、テーブルの情報はGetMapping()メソッドで取得できます。

データの削除は、削除対象のオブジェクトがあればDelete()メソッドを使用します。オブジェクトがない場合は、Execute()メソッドによりSQL文を直接実行することで削除できます。

4423.ch