XamarinでSQLiteを使う

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

スポンサーリンク

シェアする

フォローする