[Xamarin.Android]使用SqliteNET

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


    {
        [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>();
            }
        }

image

 

DropTable與CreateTable方式相同


        {
            using (var db = new SQLiteConnection(connString))
            {
                return db.DropTable<TestData>();
            }
        }

image

 

InsertData直接給一個TestData類別就會Insert一筆資料,

如果有設定AutoIncrement,在資料新增完後會返回該值。


        {
            using (var db = new SQLiteConnection(connString))
            {
                return db.Insert(data);
            }
        }

 

 

 

 

 

 

image

 

 

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

image

image

 

簡單拉個畫面測試看看

image

 

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

image

 

查詢所有資料

 

 

 

 

image

 

查詢單一筆資料

image

 

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

 

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

Genymotion提供的都是root過的。

image

image

image image

 

 

 

 

 

 

以上便是簡單的SqliteNET簡單的介紹使用

範例下載

 

參考連結