zoukankan      html  css  js  c++  java
  • [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

  • 相关阅读:
    bind函数(c++11)
    谓词
    lambda表达式(c++11)
    重载运算符
    sizeof新用法(c++11)
    引用限定符(c++11)
    this指针和const成员函数
    JavaScript for循环元素取下标问题
    Hbuider sass配置 webstorm scss配置
    检测对象是否拥有某一属性
  • 原文地址:https://www.cnblogs.com/whatthehell/p/3444401.html
Copyright © 2011-2022 走看看