[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過的。
![]()
![]()
![]()
[Xamarin.Android]使用SqliteNET (转帖)的更多相关文章
- [Xamarin.Android] 結合Windows Azure與Google cloud message 來實現Push Notification (转帖)
這一篇要討論如何使用Xamarin.Android 整合GCM以及Windows Azure來實作Android手機上的推播通知服務. 這篇文章比較著重概念的部分,在開始讀這篇之前,也可以先參考一下X ...
- [Xamarin.Android] 儲存資料於Windows Azure (转帖)
在準備討論Xamarin.Android 如何整合GCM與Windows Azure來實作Push Notification之前, 先來了解如何將Xamarin.Android 與Windows Az ...
- [Xamarin.Android]如何引用JAR檔案 (转帖)
這個範例是如何在Xamarin.Android中去使用一個我們自行在開發的JAR檔案. 主要會執行的步驟如下 1. 在Xamarin建立一個Android Java Bindings Library ...
- [Xamarin.Android] 如何使用Google Map V2 (转帖)
Google Map v1已經在2013年的3月開始停止支援了,目前若要在你的Android手機上使用到Google Map,就必須要使用 到Google Map v2的版本.在Xamarin要使用G ...
- Xamarin.Android中使用android:onClick="xxx"属性
原文:Xamarin.Android中使用android:onClick="xxx"属性 在原生Android开发中,为一个View增加点击事件,有三种方式: 1.使用匿名对象 ( ...
- Xamarin android使用Sqlite做本地存储数据库
android使用Sqlite做本地存储非常常见(打个比方就像是浏览器要做本地存储使用LocalStorage,貌似不是很恰当,大概就是这个意思). SQLite 是一个软件库,实现了自给自足的.无服 ...
- XAMARIN.ANDROID SIGNALR 实时消息接收发送示例
SignalR 是一个开发实时 Web 应用的 .NET 类库,使用 SignalR 可以很容易的构建基于 ASP.NET 的实时 Web 应用.SignalR 支持多种服务器和客户端,可以 Host ...
- XAMARIN ANDROID 二维码扫描示例
现在二维码的应用越来越普及,二维码扫描也成为手机应用程序的必备功能了.本文将基于 Xamarin.Android 平台使用 ZXing.Net.Mobile 做一个简单的 Android 条码扫描示 ...
- 我正在使用Xamarin的跨平台框架—Xamarin.Android回忆录
一.缘起 在自己给别家公司做兼职外包的时候,已经明确知道外包的活不是那么好干的,一般在经历了初期热血澎湃的激情后,逐渐冷淡,愤怒,再冷淡,再愤怒…,听上去好像高潮迭起,但令人尴尬的是,这高潮迭起我们都 ...
随机推荐
- Linux执行YUM命令报错解决方案
Loaded plugins: rhnplugin, security This system is not registered with RHN. RHN support will be disa ...
- 在Word 中撰写并发布到博客的帮助
目前大部分的博客作者在用Word写博客这件事情上都会遇到以下3个痛点: 1.所有博客平台关闭了文档发布接口,用户无法使用Word,Windows Live Writer等工具来发布博客.使用Word写 ...
- Linux 基础教程 39-作业控制
在Linux系统中,作业是由一个或多个关联进程组成的.用户可以运行多个作业并可以在作业间切换.而作业控制则是对作业的行为进行控制,允许用户对作业的前后台的进行切换和终止操作等.作业相关的控制命 ...
- CGLIB实现动态代理
JDK动态代理和CGLIB字节码生成的区别? * JDK动态代理只能对实现了接口的类生成代理,而不能针对类 * CGLIB是针对类实现代理,主要是对指定的类生成一个子类,覆盖其中的方法 因为是继承 ...
- freemarker获取变量的范围的问题
今天做freemarker的时候,想用一下全局的变量.就是在a.ftl 和 b.ftl页面里面,使用a.action里面放入request的变量.a.action的视图页面是a.ftl ,b.ftl是 ...
- Linux下source文件两种方法
1.直接source命令加文件 source /etc/rc.d/init.d/functions 2.点(.)加文件 . /etc/rc.d/init.d/functions
- 记录---IIS显示asp.net程序的具体错误
原来IIS设置成显示单一的错误页面 但是最近的服务器页面报错,但是本地确实完好的:所以想着让服务器显示具体的报错 网上找到两种方法: 先说第一种有效的: 通过 web.config 配置 其实,上面在 ...
- 数据与任务的并行---Parallel类
Parallel类是对线程的抽象,提供数据与任务的并行性.类定义了静态方法For和ForEach,使用多个任务来完成多个作业.Parallel.For和Parallel.ForEach方法在每次迭代的 ...
- 当Shell遇上了NodeJS
此文已由作者尧飘海授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 摘要 在企业级系统维护和互联网运维中,Shell脚本的编写与维护常必不可少, 但是Shell脚本的编写与调试 ...
- 「CodeChef - SKIRES」Ski Resort
题目链接 戳我 \(Description\) 给你一个\(n*m\)的网格,以及网格上的两个格子\(A,B\).每个格子有一个高度.每次操作可以选择一个格子(不能是\(A\)或\(B\))并将它的高 ...