【XAMARIN】SQLiteを試す
データの永続的な保存方法として、SQLiteを使用してみた。
<注意>自分は今回以下のように使用しただけで、本当に使い方が合ってるかは分かりかねます
使用準備
NuGetから「sqlite-net-pcl」をインポートするだけ
テーブル用のクラスを作成
using System; namespace SimpleMemo { public class CategoryTable { [SQLite.PrimaryKey, SQLite.AutoIncrement] public int Id { get; set; } public string Key { get; set; } } }
CategoryTable というテーブルを作成。
[Id]というカラムをプライマリキーにし、自動採番するようにしてます。
SELECT
string database = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments), "SimpleMemo.db"); using (var db = new SQLite.SQLiteConnection(database) { // テーブル作成(何度呼び出しても問題なし。すでに作成されている場合はCreateTableは走らないらしい) db.CreateTable<CategoryTable>(); // カテゴリテーブルのデータを全て取得(ID順) List<CategoryTable> row = db.Table<CategoryTable>().OrderBy(x => x.Id).ToList(); }
UPDATE
using (var db = new SQLite.SQLiteConnection(database) { // Id = 1のレコードを取得 CategoryTable row = db.Table<CategoryTable>().SingleOrDefault(x => x.Id == 1); // 更新 if (row != null) { row.Key = "ざまりん"; db.Update(row); } }
直にUPDATE文を書いた方がSQL一回で済むし、処理的には速そう
DELETE
using (var db = new SQLite.SQLiteConnection(database) { // Id = 1のレコードを取得 CategoryTable row = db.Table<CategoryTable>().SingleOrDefault(x => x.Id == 1); // 削除 if (row != null) { db.Delete<CategoryTable>(row.Id); } }
このやり方が良いのかは凄く微妙・・・
INSERT
using (var db = new SQLite.SQLiteConnection(database) { // 追加 db.Insert(new CategoryTable { Key = "ざまりん" }); }
ここで凄く悩んだことが一つ!!
INSERTで自動採番したIDを取得したいと思ったのですが、良い方法が見つからず。。。
結局、INSERT後に、以下のSQLを実行して取得してます。
// 一番新しい行を取得 CategoryTable lastData = db.Query<CategoryTable>("SELECT * FROM CategoryTable ORDER BY rowid desc limit 1").Single(); // ID取得 int id = lastData.Id;
もっと良い方法があるはず!!
どなたか教えていただけると嬉しいです。。。