[Xamarin.Android]使用SqliteNET
Xamarin除了提供ADO.NET方式操作Sqlite外,
也提供了一個類似Entity Framework的SqliteNET,
可至官網提供的連結下載Source,
或點選這裡下載。
以下範例使用VS2012+Genymotion
首先新增一個Android 專案,將Sqlite.cs加入專案。
Entity的部分就要自己建立了,建立出來的Entity同等於做出一個Table。
新加入一個類別叫TestData並給兩個屬性,DataID、DataVal。
在DataID上給予PrimaryKey,AutoIncrement兩個值,
表示指定該欄位為主鍵,並會自動產生Index值。
{
[PrimaryKey,AutoIncrement]
public int DataID { get; set; }
public string DataVal { get; set; }
}
接著增加一個類別,做為對TestData這個資料表的操作。類別名為TestDataRepository。
DB檔名取為Test.db。
建立CreateTable、DropTable、InsertData、GetData、GetAllData這幾個方法。
在物件的建構子中,設定連線字串,並且呼叫CreateTable方法。
private string connString;
public TestDataRepository()
{
connString = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Personal), DbName);
CreateTable();
}
CreateTable只有在Table不存在的時候才會執行建立Table的動作,
將要建立Table的型別放在後面的泛型參數就會自動產生Create語法。
{
using (var db = new SQLiteConnection(connString))
{
return db.CreateTable<TestData>();
}
}
DropTable與CreateTable方式相同
{
using (var db = new SQLiteConnection(connString))
{
return db.DropTable<TestData>();
}
}
InsertData直接給一個TestData類別就會Insert一筆資料,
如果有設定AutoIncrement,在資料新增完後會返回該值。
{
using (var db = new SQLiteConnection(connString))
{
return db.Insert(data);
}
}
GetData設計為傳入主鍵值進行查詢,
這裡設計成用.where來查詢,也可以用.Get<T>(PrimaryKey)來取得資料。
{
int x;
if (int.TryParse(pk, out x))
{
using (var db = new SQLiteConnection(connString))
{
return db.Table<TestData>().Where(c => c.DataID == x).FirstOrDefault();
}
}
return null;
}
最後一個GetAllData,直接將.Table<T>() ToList()回傳
{
using (var db = new SQLiteConnection(connString))
{
return db.Table<TestData>().ToList();
}
}
當有特殊需求需要下指令時,
他也提供了Execute和ExecuteScalar<T>兩種方式。
簡單拉個畫面測試看看
新增一筆資料,新增完後取回返回的KEY值
查詢所有資料
查詢單一筆資料
至於重建資料表就是把資料表Drop掉再Create而已~
另外資料表存放的位置,要root過才看到的。
Genymotion提供的都是root過的。
以上便是簡單的SqliteNET簡單的介紹使用