Xamarin.Forms 使用本地数据库之 SQLite
前言
Xamarin.Forms支持使用SQLite数据库引擎。本文介绍了Xamarin.Forms应用程序如何读取和写入数据到使用SQLite.Net的本地SQLite数据库。
在Xamarin.Forms项目中引用 SQLite 包
要使用 SQLite , 我们先要引用 SQLite 的引用包。使用 NuGet 的搜索功能查找sqlite net pcl并安装最新的包:
连接 SQLite 本地数据库并创建数据表
//SQLite 数据库地址
var path = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), "sqlite.db3");
using (SQLiteConnection con = new SQLiteConnection(path))
{ }
通过以上代码,创建一个名为 "sqlite.db3" 的 SQLite 本地数据库,并进行连接操作。(本地数据库存在时,直接连接)
可以看到 SQLiteConnection 对象的 DatabasePath 的路径为:/data/user/0/com.companyname.Samples/files/.local/share/sqlite.db3 。至此我们创建本地数据库及连接本地数据库成功!
在本文中主要介绍通过 SQLite.NET ORM 操作数据库。
//SQLite 数据库地址
var path = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), "sqlite.db3");
using (SQLiteConnection con = new SQLiteConnection(path))
{
// ORM方式
con.DropTable<Student>();
con.DropTable<Subject>();
con.DropTable<StudentSubject>();
con.CreateTables<Student, Subject, StudentSubject>(); sl.Children.Add(new Label() { Text = "建表完成" });
}
通过 DropTable<T>() 删除表。
通过 CreateTable<T>() 或 CreateTables<T,T,T>() 创建表。
public class Student
{
[PrimaryKey]
public string id { get; set; }
public string name { get; set; }
public int age { get; set; }
} public class Subject
{
[PrimaryKey]
public string id { get; set; }
public string name { get; set; }
} public class StudentSubject
{
[PrimaryKey]
public string id { get; set; }
public string student_id { get; set; }
public string subject_id { get; set; }
}
在类 Student,Subject,StudentSubject 中,通过在属性上标记 [PrimaryKey] 标示 id 列为 主键列。(主键列很重要,在修改,删除操作中会用到)
在 SQLite 本地数据库中 INSERT 数据
var path = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), "sqlite.db3");
using(var con = new SQLiteConnection(path))
{
// ORM方式
var list = new List<object>();
list.Add(new Student() { id = "stu_1", name = "张三", age = }); list.Add(new Subject() { id = "subject_1", name = "计算机" });
list.Add(new Subject() { id = "subject_2", name = "数学" });
list.Add(new Subject() { id = "subject_3", name = "英语" }); list.Add(new StudentSubject() { id = "ss_1", student_id = "stu_1", subject_id = "subject_1" });
list.Add(new StudentSubject() { id = "ss_2", student_id = "stu_1", subject_id = "subject_2" });
list.Add(new StudentSubject() { id = "ss_3", student_id = "stu_1", subject_id = "subject_3" }); var result = con.InsertAll(list); sl.Children.Add(new Label() { Text = result > ? "插入成功" : "插入失败" });
}
通过 Insert(Object object) 或 InsertAll(IEnumerable objects) 或 Execute(string query, params object[] args) 进行 新增操作;
在 SQLite 本地数据库中 SELECT 数据
var path = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), "sqlite.db3");
using (var con = new SQLiteConnection(path))
{
// ORM方式
// var student = con.Table<Student>().FirstOrDefault();
// SQL语句方式
var student = con.Query<Student>("SELECT id,name,age FROM Student LIMIT 0,1;").FirstOrDefault(); // ORM方式
// var studentSubjects = con.Table<StudentSubject>().ToList();
// SQL语句方式
var studentSubjects = con.Query<StudentSubject>("SELECT student_id,subject_id FROM StudentSubject;").ToList(); if (student == null)
{
sl.Children.Add(new Label() { Text = "无数据" });
return;
} sl.Children.Add(new Label() { Text = string.Format("student.id = {0}", student.id) });
sl.Children.Add(new Label() { Text = string.Format("student.name = {0}", student.name) });
sl.Children.Add(new Label() { Text = string.Format("student.age = {0}", student.age) }); studentSubjects.ForEach(ss =>
{
// ORM方式
// var subject = con.Table<Subject>().Where(o => o.id.Equals(ss.subject_id)).FirstOrDefault();
// SQL语句方式
var subject = con.Query<Subject>("SELECT * FROM Subject WHERE id = ?", new object[] { ss.subject_id }).FirstOrDefault(); sl.Children.Add(new Label() { Text = string.Format("student.subject = {0}", subject.name) });
});
}
通过 Query<T>(string query, params object[] args) 或 TableQuery<T> Table<T>() 进行 查询操作;
在 SQLite 本地数据库中 UPDATE 数据
var path = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), "sqlite.db3");
using (var con = new SQLiteConnection(path))
{
// ORM方式
var student = con.Table<Student>().FirstOrDefault();
if (student == null)
{
sl.Children.Add(new Label() { Text = "无数据" });
return;
} student.name = "我是修改后的姓名";
var result = con.Update(student); sl.Children.Add(new Label() { Text = result > ? "修改成功" : "修改失败" });
}
通过 Update(object obj) 或 Execute(string query, params object[] args) 进行 修改操作;
在 SQLite 本地数据库中 DELETE 数据
var path = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), "sqlite.db3");
using (var con = new SQLiteConnection(path))
{
var student = con.Table<Student>().FirstOrDefault();
if (student == null)
{
sl.Children.Add(new Label() { Text = "无数据" });
return;
} // ORM方式
// var result = con.Delete(student);
// SQL语句方式
var result = con.Execute("DELETE FROM Student WHERE id = ?", new object[] { student.id }); sl.Children.Add(new Label() { Text = result > ? "删除成功" : "删除失败" });
}
通过 Delete<T>(object primaryKey) 或 Execute(string query, params object[] args) 进行 删除操作;
结束语
本文所有代码都在 https://github.com/hexu6788/XamarinForms-Samples
如果你觉得本篇文章对您有帮助的话,感谢您的【推荐】。
如果你对 .NET 或 Xamarin 有兴趣的话可以关注我,我会定期的在博客分享我的学习心得。
本文地址:https://www.cnblogs.com/hexu6788/p/10102942.html
作者博客:何旭
欢迎转载,请在明显位置给出出处及链接
Xamarin.Forms 使用本地数据库之 SQLite的更多相关文章
- (转)HTML5 本地数据库(SQLite) 示例
HTML5 本地数据库(SQLite) 示例 2012-05-07 16:21:13 标签:SQLite HTML5本地数据库 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作 ...
- HTML5本地数据库(SQLite)示例
本文转载自http://blog.sina.com.cn/s/blog_641cf27f01016pm5.html 按照国内一HTML5先行者的例子仿写了一个用HTML5 API来操作本地SQLite ...
- HTML5 本地数据库(SQLite) 示例
http://supercharles888.blog.51cto.com/609344/856071 http://www.sqlite.org/download.html
- 整理 Xamarin.Forms - Plugins
Open Source Components for Xamarin Xamarin官方整理的一些开源组件,有需要可以先到这里找 GitHub: xamarin/XamarinComponents: ...
- Xamarin.Forms学习系列之SQLite
在App中我们通常不会实时获取服务器数据,会在用户手机中保存历史数据,这个时候就需要用到数据库SQLite,由于微软的封装,在Xamarin中操作SQLite非常简单,类似EF的操作. 1.我们需要在 ...
- [转载]Unity3D 游戏引擎之使用C#语言建立本地数据库(SQLITE)
以前在开发中一直使用IOS源生的数据库,通过传递消息的形式在与Unity3D中进行交互.本文我在详细说说如何使用C#语言来在MAC 操作系统下创建Unity本地数据库,我是C#控哇咔咔--- 首先你需 ...
- Xamarin.Android 本地数据库 SQLiteDatabase 操作
目的:使用 SQLiteDatabase 创建本地数据库.表,并对数据进行增删改查操作. 引用命名空间: using Android.App; using Android.Widget; using ...
- QT 创建本地数据库(SQLite数据库)存储数据
注意:QT自带SQLITE数据库,不需要再安装 1.创建一个包含创建.查询.修改和删除数据库的数据库类(DataBase) DataBase.h头文件 #pragma once #include &l ...
- 老司机学新平台 - Xamarin Forms开发框架之MvvmCross插件精选
在前两篇老司机学Xamarin系列中,简单介绍了Xamarin开发环境的搭建以及Prism和MvvmCross这两个开发框架.不同的框架,往往不仅仅使用不同的架构风格,同时社区活跃度不同,各种功能模块 ...
随机推荐
- Linux编程 23 shell编程(结构化条件判断 命令if -then , if-then ... elif-then ...else,if test)
一.概述 在上一篇里讲到了shell脚本,shell按照命令在脚本中出现的顺序依次进行处理,对于顺序操作已经足够了,但许多程序要求对shell脚本中的命令加入一些逻辑流程控制,这样的命令通常叫做 结构 ...
- Android--通过Application传递数据
在整个Android程序中,有时需要保存某些全局的数据(如:用户信息),方便在程序的任何地方调用.在Activity之间数据传递中有一种比较使用的方式,就是全局对象,使用过J2EE的都应该知道Java ...
- [工具向]__申请,下载,使用百度地图api
前言 api即应用程序接口,在我们的日常开发中,我们不仅可以在开源代码仓库(,github,码云)中获得很大的帮助,在日常开发中占重要地位的另一个东西就是api,我们可以使用众多的第三方编写的优秀的a ...
- 手写spring(简易版)
本文版权归 远方的风lyh和博客园共有,欢迎转载,但须保留此段声明,并给出原文链接,谢谢合作,如有错误之处忘不吝批评指正! 理解Spring本质: 相信之前在使用spring的时候大家都配置web.x ...
- 【干货】利用MVC5+EF6搭建博客系统(三)添加Nlog日志、缓存机制(MemoryCache、RedisCache)、创建控制器父类BaseController
PS:如果图片模糊,鼠标右击复制图片网址,然后在浏览器中打开即可. 一.回顾系统进度以及本章概要 目前博客系统已经数据库创建.以及依赖注入Autofac集成,接下来就是日志和缓存集成,这里日志用的是N ...
- 通过keras例子理解LSTM 循环神经网络(RNN)
博文的翻译和实践: Understanding Stateful LSTM Recurrent Neural Networks in Python with Keras 正文 一个强大而流行的循环神经 ...
- ORACLE 配置连接远程数据库
ORACLE配置tnsnames.ora文件实例 客户机为了和服务器连接,必须先和服务器上的监听进程联络.ORACLE通过tnsnames.ora文件中的连接描述符来说明连接信息.一般tnsnames ...
- [PHP] 多进程通信-消息队列使用
向消息队列发送数据和获取数据的测试 <?php $key=ftok(__FILE__,'a'); //获取消息队列 $queue=msg_get_queue($key,0666); //发送消息 ...
- SpringBoot简介
Spring Boot,简单讲就是牺牲项目的自由度来减少配置的复杂度(“契约式编程”思想,SpringBoot自动配置方案的指导思想).约定一套规则,把这些框架都自动配置集成好,从而达到“开箱即用”. ...
- clean 伪目标
下面的"clean"目标,是一个"伪目标", clean: rm *.o temp 我们生成了许多文件编译文件,我们也应该 ...