[Xamarin.Android]使用SqliteNET (转帖)

Xamarin除了提供ADO.NET方式操作Sqlite外,

也提供了一個類似Entity Framework的SqliteNET,

可至官網提供的連結下載Source

點選這裡下載

 

以下範例使用VS2012+Genymotion

首先新增一個Android 專案,將Sqlite.cs加入專案。

image

image

 

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        }

image

 

DropTable與CreateTable方式相同

1 public int DropTable()
2 {
3     using (var db = new SQLiteConnection(connString))
4     {
5         return db.DropTable<TestData>();
6     }
7 }

image

 

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        }

 

 

 

 

 

 

image

 

 

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>兩種方式。

image

image

 

簡單拉個畫面測試看看

image

 

新增一筆資料,新增完後取回返回的KEY值

image

 

查詢所有資料

 

 

 

 

image

 

查詢單一筆資料

image

 

至於重建資料表就是把資料表Drop掉再Create而已~

 

另外資料表存放的位置,要root過才看到的。

Genymotion提供的都是root過的。

image

image

image image

原文地址:https://www.cnblogs.com/whatthehell/p/3444401.html