Xamarin.AndroidでSQLiteを使うときの方法が分かりにくくて苦労したので、メモしておきます。

基本的に、Xamarinのサイトを参考にしています。 Part 3 -; Using SQLite.NET ORM

環境

  • VisualStudio 2015
  • Xamarin Android 5.1.5

SQLiteを使う準備

SQLiteを使うために、クラスを追加します。 ソースコードはGitHubに公開されているので、そこからコピーして、SQLite.csという名前で保存しておきます。 SQLite.cs これで、SQLiteを使うための準備はできました。

次に、テーブルの定義をします。

テーブルの定義

テーブルの定義は、さきほど追加したSQLiteクラスを使っておこないます。 今回はテーブルに、主キーとしてID、他にタイトルと本文を保存することにします。

using SQLite;

[Table("Items")]
public class Data
{
    [PrimaryKey, AutoIncrement, Column("_id")]
    public int Id { get; set; }       // 主キー
    public string Title { get; set; } // タイトル
    public string Body { get; set; }  // 本文
}

このようにテーブルを定義します。

以下に、属性についての説明をします。

  • Table属性……テーブルを作成するときの名前(クラス名とは別)
  • PrimaryKey属性……主キーとして使う
  • AutoIncrement属性……データ保存時に自動で値をインクリメントする
  • Column属性……テーブルを作成するときのカラム名

次に、データベースとテーブルを作成します。

データベースとテーブルの作成

最初に、データベースとテーブルの作成をします。 作成にはSQLiteクラスを使います。 DoDatabaseAccess()メソッドにプログラムを書きます。

private static void DoDatabaseAccess()
{
    string dbPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Personal), "study_sql.db3");
    var db = new SQLiteConnection(dbPath);
    db.CreateTable();
}

データベースの作成には、SQLiteConnectionクラスを使います。SQLiteConnectionクラスはデータベースのアクセスにも使います。 引数には、SQLiteで使うデータが入ったファイルのパスを指定します。パスの指定には、Path.Combine()を使い、第2引数にファイルの名前を指定します。 テーブルの作成には、SQLiteConnectionクラスのCreateTable<>()メソッドを使います。型引数には、テーブルのクラスを指定します。 これで、データベースとテーブルが出来ました。

次に、データの追加です。

テーブルへのデータの追加

テーブルへのデータの追加をします。

string dbPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Personal), "study_sql.db3");
var db = new SQLiteConnection(dbPath);
db.CreateTable<Data>();

var newData = new Data
{
    Title = titleText,
    Body = bodyText
};
db.Insert(newData);

データの追加は、追加したいデータのテーブル定義のクラスからインスタンスを作って、そのデータをSQLiteConnectionクラスのInsert()メソッドを使ってデータを追加します。 CreateTable()メソッドはなくても良いのですが、もしテーブルが作られていないとその後のプログラムでエラーがでるので、かいてあります。ちなみに、CreateTable()メソッドはテーブルが作成されていた場合は、なにもしません。

次に、データにアクセスします。

データへのアクセス

データにアクセスします。

string dbPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Personal), "study_sql.db3");
var db = new SQLiteConnection(dbPath);
db.CreateTable<Data>();

db.Table<Data>();

データにアクセスするには、Table<>()メソッドを使います。型引数には、テーブルのクラスを指定します。 ちなみに、C#の機能のひとつであるLINQを使うこともできます。

string dbPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Personal), "study_sql.db3");
var db = new SQLiteConnection(dbPath);
db.CreateTable<Data>();

var table = from s in db.Table<Data>()
            select s;

他にも、Getメソッドを使うと、主キーでデータを絞ることもできます。

string dbPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Personal), "study_sql.db3");
var db = new SQLiteConnection(dbPath);
db.CreateTable<Data>();

var data = db.Get<Data>(1);

これで、IDが1のデータを取得できます。

次に、データの削除をします。

データの削除

データの削除をします。

string dbPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Personal), "study_sql.db3");
var db = new SQLiteConnection(dbPath);
db.CreateTable<Data>();

db.Delete<Data>(someData.Id);

データの削除は、Delete()メソッドを使います。引数には、テーブルのクラスと主キー、今回はIdを指定します。

最後に

このようにSQLiteを使っていきます。