SQLite は Android の API をラップ下 API で素直に扱うことができます。
Android.Database.Sqlite.SQLiteOpenHelper
クラスのサブクラスを作って素直に使えば OK です。
コード
・MySQLiteHelper / Android.Database.Sqlite.SQLiteOpenHelper のサブクラス
class MySQLiteHelper : Android.Database.Sqlite.SQLiteOpenHelper { private static string DbName { get; } = "northwind"; private static int Version { get; } = 1; public MySQLiteHelper(Context context):base(context, DbName, null, Version) { ; } public override void OnCreate(SQLiteDatabase db) { // データベースの初期化。テーブルの作成などする db.ExecSQL("Create Table Tran(Id integer primary key autoincrement, Name text, MId integer)"); db.ExecSQL("Create Table Master(MId integer primary key autoincrement, MName text)"); } public override void OnUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { // アプリケーションのアップグレード時の処理を書くなどする ; } }
・MainActivity
public class MainActivity : Activity { protected override void OnCreate(Bundle savedInstanceState) { base.OnCreate(savedInstanceState); // UI の構築。ボタンを一つ置いてイベントハンドラを設定 SetContentView(Resource.Layout.Main); var button = new Button(this) { Text = "button" }; ((Android.Views.ViewGroup)FindViewById<Android.Views.ViewGroup>(Android.Resource.Id.Content).GetChildAt(0)).AddView(button); button.Click += Button_Click; } // ボタンクリックのイベントハンドラ private void Button_Click(object sender, System.EventArgs e) { using (var db = new MySQLiteHelper(this.ApplicationContext).WritableDatabase) { {// 一つ目のテーブルに値を追加 var values = new Android.Content.ContentValues(); values.Put("Name", "N" + System.DateTime.Now.ToString()); values.Put("MId", 1); db.Insert("Tran", null, values); } {// 二つ目のテーブルに値を追加 var values = new Android.Content.ContentValues(); values.Put("MName", "MN" + System.DateTime.Now.ToString()); db.Insert("Master", null, values); } {// テーブルを Join して値を取得 var text = new System.Text.StringBuilder(); using (var cursor = db.RawQuery("Select * From Tran Inner Join Master On Tran.MId = Master.MId", null)) { while (cursor.MoveToNext()) { foreach (var index in System.Linq.Enumerable.Range(0, cursor.ColumnCount)) { text.AppendLine($"{cursor.GetColumnName(index)}:{cursor.GetString(index)}"); } text.AppendLine(); } } // 取得結果を表示 new AlertDialog.Builder(this).SetMessage(text.ToString()).Show(); } } } }
ポイント
MainActivity クラスでの Insert や Select はまあ見れば大体 OK でしょう。
Insert も Select も複数のメソッドがありますが、そこはまた後日。
今回は、MySQLiteHelper
クラスの OnCreate
メソッドに注目しておきます。
OnCreate
メソッドはアプリがインストールして最初にデータベースを使う際に呼び出され、データベースの初期化をします。
上記では、テーブルを作成しています。初期データも設定する必要があればここでやっておくのが良いでしょう。
もう一つポイント
もう一つ、OnUpgrade
メソッドもポイントです。
アプリのアップデートで、テーブルやカラム、マスターデータなどの追加をする場所です。
アプリのアップデートとは必ず毎回のアップデートを適用してもらえているものではありません。
OnUpgrade
メソッドではアップデート前のバージョン番号と現在のバージョン番号が渡されるようになっています。