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を使っていきます。