【Win10】在应用中使用 SQLite 数据库
在绝大多数应用中,免不了要做的一项就是设置这样的本地数据存储。简单的数据存储我们可以使用 LocalSettings 或者 IsolatedStorageFile(独立存储)等等的方式来进行本地数据存储。但是,如果数据比较复杂,或者是存在关联关系的情况下,这种简单的键值存储方式是不够用的。这时候就需要用到数据库来进行存储。说到数据库,小型、轻量基于文件的 SQLite 就很适合在这种场合使用。
一、安装 SQLite for Universal App Platform VSIX 扩展
打开菜单栏的工具-扩展与更新,选择左侧的联机选项卡,在右上角搜索框输入 SQLite。

安装上面这个 SQLite for Universal App Platform 扩展。等待安装完成后,重新启动 Visual Studio。
二、在项目中添加引用
1、添加对 SQLite 的引用
新建一个项目(当然在现有项目添加也可以,这里只是演示)。等待新建完成后,添加引用。


按照图片中的步骤,找到 SQLite for Universal App Platform,并勾选,然后按右下角的确定按钮。
2、添加 SQLite.Net 的引用


或者可以直接在程序包管理器控制台键入:Install-Package SQLite.Net-PCL 来进行安装。
3、确保引用无误
确保项目是把这两个包都引用上

三、开始编码
1、编写用于测试的 Person 模型类
public class Person
{
[PrimaryKey]// 主键。
[AutoIncrement]// 自动增长。
public int Id
{
get;
set;
} [MaxLength()]// 对应到数据库 varchar 的大小。
public string Name
{
get;
set;
}
}
需要注意的是,MaxLengthAttribute 所在的命名空间是 SQLite.Net.Attributes,而不是 .Net 框架里的 System.ComponentModel.DataAnnotations。
2、编写测试页面的前台 Xaml 代码
<Page x:Class="SqliteDemo.MainPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
<StackPanel Margin="100">
<TextBlock Text="添加"></TextBlock>
<TextBox Header="名字"
x:Name="txtAddName"></TextBox>
<Button Content="添加进数据库"
Click="BtnAdd_Click"></Button>
<TextBlock Text="查询"
Margin="0,50,0,0"></TextBlock>
<Button Content="查询所有"
Click="BtnGetAll_Click"></Button>
</StackPanel>
</Grid>
</Page>
3、编写测试页面的后台 cs 代码
public sealed partial class MainPage : Page
{
public MainPage()
{
this.InitializeComponent();
} private async void BtnAdd_Click(object sender, RoutedEventArgs e)
{
string name = txtAddName.Text;
using (var conn = AppDatabase.GetDbConnection())
{
// 需要添加的 Person 对象。
var addPerson = new Person() { Name = name }; // 受影响行数。
var count = conn.Insert(addPerson); string msg = $"新增的 Person 对象的 Id 为 {addPerson.Id},Name 为 {addPerson.Name}";
await new MessageDialog(msg).ShowAsync();
}
} private async void BtnGetAll_Click(object sender, RoutedEventArgs e)
{
using (var conn = AppDatabase.GetDbConnection())
{
StringBuilder msg = new StringBuilder();
var dbPerson = conn.Table<Person>();
msg.AppendLine($"数据库中总共 {dbPerson.Count()} 个 Person 对象。");
foreach (var person in dbPerson)
{
msg.AppendLine($"Id:{person.Id};Name:{person.Name}");
} await new MessageDialog(msg.ToString()).ShowAsync();
}
}
}
4、编写 AppDatabase 类
public static class AppDatabase
{
/// <summary>
/// 数据库文件所在路径,这里使用 LocalFolder,数据库文件名叫 test.db。
/// </summary>
public readonly static string DbPath = Path.Combine(ApplicationData.Current.LocalFolder.Path, "test.db"); public static SQLiteConnection GetDbConnection()
{
// 连接数据库,如果数据库文件不存在则创建一个空数据库。
var conn = new SQLiteConnection(new SQLitePlatformWinRT(), DbPath);
// 创建 Person 模型对应的表,如果已存在,则忽略该操作。
conn.CreateTable<Person>();
return conn;
}
}
四、运行
注意:必须将项目的编译改为 x86 或者 x64,不能是 Any。
程序运行起来后,我们先添加几个数据:




添加完这 4 个数据之后,我们点击查询按钮。

好像没什么问题。慢着,我们的 Person 模型不是在 Name 属性上标注了 MaxLength 为 5 的吗?为什么阿历山大大帝还在?!(阿力山大大帝:我怎么躺枪了)
查阅园子里的资料得知:

新知识点 GET!
(这问题之前一直没怎么留意过……)
所以要判断的话,只能在插入数据前判断了。
五、查看存储的数据库
首先先打开项目的 Package.appxmanifest 文件,然后选择打包选项卡。

将包名这串字符串复制下来。
打开文件浏览器,路径输入 %USERPROFILE%\AppData\Local\Packages\
然后在右上角搜索刚刚复制的包名。

打开这个文件夹。

然后打开 LocalState 这个文件夹,里面可以发现一个 test.db 的文件,这就是我们的数据库了。
然后我们把它复制出来,并用 SQLite 数据库软件打开它,这里我使用的是 SQLiteStudio,百毒一下就有它的官方网站了。





按上面的步骤的话,就能够看到我们定义的 Person 类所对应的表结构了。

而且也能看见我们刚刚插入的数据。
六、结语
1、为啥写这篇 blog ?
今天看见 MS-UAP 写了篇也是关于使用 SQLite 的 blog,才想起之前就一直也想写一篇关于 WinRT 下如何使用 SQLite 的 blog。纯粹填坑,部分内容与 MS-UAP 写的重复,本文可作为补充。
2、本文适用人群
①、对 SQLite 有使用需求的人群,不一定是 UWP 的开发人员,因为这个 SQLite.Net 的库是 PCL 的,可以在其它平台(例如 Winform)也能使用,在 SQLiteConnection 的构造函数传递相应平台的参数即可。
②、ORM 爱好者、讨厌 sql 人群。像我这种 sql 不怎么样的就只能抱 ORM 的大腿了。所以如果是 sql 爱好者,请去看 MS-UAP 写的那篇,那篇使用的 SQLite 库是类似 C 的风格,使用传统的 sql 语句。
【Win10】在应用中使用 SQLite 数据库的更多相关文章
- Android虚拟机中的sqlite数据库文件
Android虚拟机中的sqlite数据库文件 ①
- 在项目中使用SQLite数据库小结
------------------------------------------------------------------------推荐: - VS2012 使用 1.0.84 版的库 - ...
- 2014-08-01 ASP.NET中对SQLite数据库的操作——ADO.NET
今天是在吾索实习的第18天.我主要学习了如何在ASP.NET中对SQLite数据库的操作,其基本操作如下: 添加引用System.Data.SQLite.dll(PS:在网页里面任意找到适合的.NET ...
- android中与SQLite数据库相关的类
为什么要在应用程序中使用数据库?数据库最主要的用途就是作为数据的存储容器,另外,由于可以很方便的将应用程序中的数据结构(比如C语言中的结构体)转化成数据库的表,这样我们就可以通过操作数据库来替代写一堆 ...
- Go语言中使用SQLite数据库
Go语言中使用SQLite数据库 1.驱动 Go支持sqlite的驱动也比较多,但是好多都是不支持database/sql接口的 https://github.com/mattn/go-sqlite3 ...
- 在Android 开发中使用 SQLite 数据库笔记
SQLite 介绍 SQLite 一个非常流行的嵌入式数据库,它支持 SQL 语言,并且只利用很少的内存就有很好的性能.此外它还是开源的,任何人都可以使用它.许多开源项目((Mozilla, PH ...
- 在 Android 应用程序中使用 SQLite 数据库以及怎么用
part one : android SQLite 简单介绍 SQLite 介绍 SQLite 一个非常流行的嵌入式数据库.它支持 SQL 语言,而且仅仅利用非常少的内存就有非常好的性能.此外它还是开 ...
- C#中使用SQLite数据库简介(上)
[SQLite数据库] SQLite是一个开源的轻量级的桌面型数据库,它将几乎所有数据库要素(包括定义.表.索引和数据本身)都保存在一个单一的文件中.SQLite用C编写实现,它在内存消耗.文件体积. ...
- 在安卓开发中使用SQLite数据库操作实例
前段时间写了个安卓平台下SQLite数据库操作的实例 ,一直没得时间总结 ,今天把它弄出来了. 在Android 运行时环境包含了完整的 SQLite. 首先介绍一下SQLite这个数据库: SQLi ...
随机推荐
- 第二次作业:Github的优点和缺点
---恢复内容开始--- GitHub的优势和劣势 简介: Github是一个代码托管平台和开发者社区,开发者可以在Github上创建自己的开源项目并与其他开发者协作编码.创业公司可以用它来托管软件项 ...
- 一个不陌生的JS效果-marquee,用css3来实现
关于marquee,就不多说了,可以戳这里. 毕竟他是一个很古老的元素,现在的标准里头也不推荐使用这个标签了.但平时一些项目中会经常碰到这样的效果,每次都是重新写一遍,麻烦! JS类实现marquee ...
- ThoughtWorks持续集成平台GO开源了
ThoughtWorks 持续集成平台Go最近宣布开源了.其基于Apache 2.0 开源协议. Go下载地址为http://www.go.cd/download/. 下面是几张来自官方的视图: GO ...
- angularjs移除不必要的$watch
在我们的web page,特别是移动设备上,太多的angular $watch将可能导致性能问题.这篇文章将解释如何去移除额外的$watch提高你的应用程序性能. $watch如果不再使用,我们最好将 ...
- ASP.net状态服务器使用
最近在开发一.NET4.0系统时经常发生session丢失问题,导致用户频繁登陆,给客户造成不良的用户体验.应项目经理号召尽快解决此问题. 一.问题描述. 服务器:windows server 200 ...
- Kafka与Logstash的数据采集对接 —— 看图说话,从运行机制到部署
基于Logstash跑通Kafka还是需要注意很多东西,最重要的就是理解Kafka的原理. Logstash工作原理 由于Kafka采用解耦的设计思想,并非原始的发布订阅,生产者负责产生消息,直接推送 ...
- salesforce 零基础学习(三十七) DML及Database方法简单描述
在apex中通过soql查询可以使用两种方式,使用DML语句或者使用Database的方法. 使用DML语句和使用Database类的方法对于我们来说用的都很多,并且都很常见.对于数据库常见的操作:增 ...
- IOS笔记045-UIDatePicker和UIPickerView
这是两种可以上下滚动的控件. 这是UIDatePicker,可以显示日期和时间. 这个是UIPickerView,显示类似几个选择项的界面. 注意点:PickerView的高度不能改,默认162,Pi ...
- KnockoutJS 3.X API 第二章 数据监控(2)监控属性数组
监控属性数组 如果要对一个对象检测和响应变化,会使用监控属性.如果要对一个序列检测并监控变化,需要使用observableArray(监控属性数组).这在你显示或编辑多个值,需要用户界面的部分反复出现 ...
- C#相关
1.索引器 索引器允许类或结构的实例按照与数组相同的方式进行索引.索引器类似于属性,不同之处在于它们的访问器采用参数.它可以像数组那样对对象使用下标.它提供了通过索引方式方便地访问类的数据信息的方法. ...