[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值。
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過的。