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