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 { getset; }
5  
6     public string DataVal { getset; }
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過的。

 

[Xamarin.Android]使用SqliteNET (转帖)的更多相关文章

  1. [Xamarin.Android] 結合Windows Azure與Google cloud message 來實現Push Notification (转帖)

    這一篇要討論如何使用Xamarin.Android 整合GCM以及Windows Azure來實作Android手機上的推播通知服務. 這篇文章比較著重概念的部分,在開始讀這篇之前,也可以先參考一下X ...

  2. [Xamarin.Android] 儲存資料於Windows Azure (转帖)

    在準備討論Xamarin.Android 如何整合GCM與Windows Azure來實作Push Notification之前, 先來了解如何將Xamarin.Android 與Windows Az ...

  3. [Xamarin.Android]如何引用JAR檔案 (转帖)

    這個範例是如何在Xamarin.Android中去使用一個我們自行在開發的JAR檔案. 主要會執行的步驟如下 1. 在Xamarin建立一個Android Java Bindings Library ...

  4. [Xamarin.Android] 如何使用Google Map V2 (转帖)

    Google Map v1已經在2013年的3月開始停止支援了,目前若要在你的Android手機上使用到Google Map,就必須要使用 到Google Map v2的版本.在Xamarin要使用G ...

  5. Xamarin.Android中使用android:onClick="xxx"属性

    原文:Xamarin.Android中使用android:onClick="xxx"属性 在原生Android开发中,为一个View增加点击事件,有三种方式: 1.使用匿名对象 ( ...

  6. Xamarin android使用Sqlite做本地存储数据库

    android使用Sqlite做本地存储非常常见(打个比方就像是浏览器要做本地存储使用LocalStorage,貌似不是很恰当,大概就是这个意思). SQLite 是一个软件库,实现了自给自足的.无服 ...

  7. XAMARIN.ANDROID SIGNALR 实时消息接收发送示例

    SignalR 是一个开发实时 Web 应用的 .NET 类库,使用 SignalR 可以很容易的构建基于 ASP.NET 的实时 Web 应用.SignalR 支持多种服务器和客户端,可以 Host ...

  8. XAMARIN ANDROID 二维码扫描示例

    现在二维码的应用越来越普及,二维码扫描也成为手机应用程序的必备功能了.本文将基于 Xamarin.Android 平台使用 ZXing.Net.Mobile  做一个简单的 Android 条码扫描示 ...

  9. 我正在使用Xamarin的跨平台框架—Xamarin.Android回忆录

    一.缘起 在自己给别家公司做兼职外包的时候,已经明确知道外包的活不是那么好干的,一般在经历了初期热血澎湃的激情后,逐渐冷淡,愤怒,再冷淡,再愤怒…,听上去好像高潮迭起,但令人尴尬的是,这高潮迭起我们都 ...

随机推荐

  1. Linux执行YUM命令报错解决方案

    Loaded plugins: rhnplugin, security This system is not registered with RHN. RHN support will be disa ...

  2. 在Word 中撰写并发布到博客的帮助

    目前大部分的博客作者在用Word写博客这件事情上都会遇到以下3个痛点: 1.所有博客平台关闭了文档发布接口,用户无法使用Word,Windows Live Writer等工具来发布博客.使用Word写 ...

  3. Linux 基础教程 39-作业控制

        在Linux系统中,作业是由一个或多个关联进程组成的.用户可以运行多个作业并可以在作业间切换.而作业控制则是对作业的行为进行控制,允许用户对作业的前后台的进行切换和终止操作等.作业相关的控制命 ...

  4. CGLIB实现动态代理

    JDK动态代理和CGLIB字节码生成的区别? * JDK动态代理只能对实现了接口的类生成代理,而不能针对类 * CGLIB是针对类实现代理,主要是对指定的类生成一个子类,覆盖其中的方法   因为是继承 ...

  5. freemarker获取变量的范围的问题

    今天做freemarker的时候,想用一下全局的变量.就是在a.ftl 和 b.ftl页面里面,使用a.action里面放入request的变量.a.action的视图页面是a.ftl ,b.ftl是 ...

  6. Linux下source文件两种方法

    1.直接source命令加文件 source /etc/rc.d/init.d/functions 2.点(.)加文件 . /etc/rc.d/init.d/functions

  7. 记录---IIS显示asp.net程序的具体错误

    原来IIS设置成显示单一的错误页面 但是最近的服务器页面报错,但是本地确实完好的:所以想着让服务器显示具体的报错 网上找到两种方法: 先说第一种有效的: 通过 web.config 配置 其实,上面在 ...

  8. 数据与任务的并行---Parallel类

    Parallel类是对线程的抽象,提供数据与任务的并行性.类定义了静态方法For和ForEach,使用多个任务来完成多个作业.Parallel.For和Parallel.ForEach方法在每次迭代的 ...

  9. 当Shell遇上了NodeJS

    此文已由作者尧飘海授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 摘要 在企业级系统维护和互联网运维中,Shell脚本的编写与维护常必不可少, 但是Shell脚本的编写与调试 ...

  10. 「CodeChef - SKIRES」Ski Resort

    题目链接 戳我 \(Description\) 给你一个\(n*m\)的网格,以及网格上的两个格子\(A,B\).每个格子有一个高度.每次操作可以选择一个格子(不能是\(A\)或\(B\))并将它的高 ...