Win10 UWP 开发系列:使用SQLite

在App开发过程中,肯定需要有一些数据要存储在本地,简单的配置可以序列化后存成文件,比如LocalSettings的方式,或保存在独立存储中。但如果数据多的话,还是需要本地数据库的支持。在UWP开发中,可以使用SQLite。本篇文章说一下如何在UWP中使用SQLite。因为SQLite是跨平台的,版本众多,我刚开始用的时候不知道要装哪个,什么WP8的、WP8.1的、Win RT的……简直摸不着头脑。希望这篇文章能让大家少走点弯路。

其实这篇文章写到一半就看到已经有大神写了这个:http://www.cnblogs.com/ms-uap/p/4798269.html

还有这个 http://www.cnblogs.com/h82258652/p/4802076.html

内容也很详细,不过为了凑博客数量,还是坚持写完吧。顺便也是给大家介绍MVVM-Sidekick的一些使用方法^_^

一、添加SQLite扩展

首先要添加SQLite的库。主页是http://sqlite.org/,下载地址在:http://sqlite.org/download.html。这个页面有所有平台的下载地址,下载这个:

然后安装。

还有一种方式是直接在VS2015里的扩展和更新里安装,搜索sqlite:

安装扩展后,需要重新启动VS2015。

二、添加SQLite引用

还是新建一个MVVM-Sidekick项目,然后编译一下,让Nuget去自动添加所需引用。MVVM-Sidekick的使用详见我之前的几篇博客。

现在可以添加SQLite引用了。在项目上点右键,添加引用:

还需要安装一个sqlite-net-pcl,相当于一个ORM:

引用中有这两个就可以了:

三、添加实体类

在项目中添加一个Models文件夹,添加一个UserItem类:


public class UserItem

{

/// <summary>

/// 自增主键

/// </summary>

[AutoIncrement, PrimaryKey]

public int Id { get; set; }

/// <summary>

/// 姓名

/// </summary>

public string UserName { get; set; }

/// <summary>

/// 年龄 不为空

/// </summary>

[NotNull]

public int Age { get; set; }

/// <summary>

/// 地址

/// </summary>

public string Address { get; set; }

/// <summary>

/// 忽略此值

/// </summary>

[Ignore]

public string SomeProperty { get; set; }

}

四、添加Command

先来简单操作一下SQLite感受一下。在MainPage页面添加两个按钮,一个是添加用户,一个是读取用户:

在App.xaml.cs里添加一个数据库名:

然后在MainPage_Model.cs文件里添加两个Command,可以用代码段propcmd来生成一段Command代码:

添加用户命名为CommandAddUser,


await MVVMSidekick.Utilities.TaskExHelper.Yield();

string path = Path.Combine(Windows.Storage.ApplicationData.Current.LocalFolder.Path, App.DbFileName);

using (var db = new SQLiteConnection(new SQLitePlatformWinRT(), path))

{

db.CreateTable<UserItem>();

UserItem item = new UserItem { Address = "北京", Age = 20, SomeProperty = "哈哈", UserName = "王小明" };

db.Insert(item);

}

获取用户列表命名为CommandGetUsers:


await MVVMSidekick.Utilities.TaskExHelper.Yield();

string path = Path.Combine(Windows.Storage.ApplicationData.Current.LocalFolder.Path, App.DbFileName);

StringBuilder sb = new StringBuilder();

using (var db = new SQLiteConnection(new SQLitePlatformWinRT(), path))

{

var list = db.Table<UserItem>();

foreach (var item in list)

{

sb.AppendLine($"{item.Id} {item.UserName} {item.Age} {item.Address}");

}

await new MessageDialog(sb.ToString()).ShowAsync();

}

然后把这两个Command绑定到页面的按钮上:

OK, 现在就可以运行一下看看了。

数据已经可以添加和读取了。

当然以上代码是非常ugly的,我们最好分一下层,把数据库交互的部分拿出来。在VM中不要出现直接访问数据库的代码。

五、重构

以前学编程的时候就经常念叨三层架构,何为三层架构?先上个图:

底层羊肉块,中层羊排,顶层海鲜,顶层的海鲜需要底层的热气来蒸,中层的羊排来把底层热气送上来……啊在深夜写这篇文章简直要流口水了……

有点跑题了。还是看我们的项目,刚才我们使用SQLite是直接在Command里连接数据库然后访问插入或读取数据,这是非常丑陋的。最好把访问数据库的代码抽出来单独放一层。

在项目里新建一个Services文件夹,添加一个DbContext.cs文件。

这个类使用单例:

然后在app初始化的时候调用一下Init方法来初始化数据库。在哪里初始化呢,我们找到Startups目录下的StartupFunctions.cs文件,初始化代码可以写在RunAllConfig()方法里:

然后在Services目录里添加一个DataService.cs文件,在这里就可以把常用的增删查改都实现一下了,如:

这个Service怎么用呢,我习惯用MVVM-Sidekick提供的一个轻量级的ioc容器,还是在Startups目录下的StartupFunctions.cs文件的RunAllConfig()方法,添加这么一行:

再回到MainPage_Model.cs文件,修改vm里的Command,

插入用户就简洁多了:

获取所有用户:

这样在vm层的代码就少很多了,实现了复用。

六、其他

本来还想写写如何读取数据库,不过在h大神http://www.cnblogs.com/h82258652/p/4802076.html 这个文章里已经详细叙述了如何去找到这个数据库及如何读取数据库,这里就不再赘述了。此外他还提到了项目必须编译为x86或x64,不能为Any CPU,也要注意下。

至于如何将数据取出来绑定到ListView上,应该就很简单了。

对了还有那个单例的基类,也附在这里:

时间: 2024-12-21 08:47:20

Win10 UWP 开发系列:使用SQLite的相关文章

Win10 UWP开发系列:使用VS2015 Update2+ionic开发第一个Cordova App

安装VS2015 Update2的过程是非常曲折的.还好经过不懈的努力,终于折腾成功了. 如果开发Cordova项目的话,推荐大家用一下ionic这个框架,效果还不错.对于Cordova.PhoneGap.ionic.AngularJS这些框架或库的关系,我个人理解是这样,PhoneGap是一个商业项目,用来实现HTML5式的跨平台开发,后来Adobe公司将其中的核心代码开源,就是Cordova,Cordova只负责实现JavaScript调用原生代码的功能,是一个壳,而壳里具体用什么样式,在H

Win10 UWP开发系列:解决Win10不同版本的Style差异导致的兼容性问题

原文:Win10 UWP开发系列:解决Win10不同版本的Style差异导致的兼容性问题 最近在开发一个项目时,遇到了一个奇怪的问题,项目依赖的最低版本是10586,目标版本是14393,开发完毕发布到商店后,很多用户报无法正常加载页面.经查,有问题的都是Win10 10586版本. 我上篇博客中写到的自定义的AppBar控件,也存在这个问题,10586会报错. 为此特意下载了10586的SDK调试.错误显示,一个样式找不到,名为ListViewItemBackground.因为开发的时候是基于

Win10 UWP开发系列——开源控件库:UWPCommunityToolkit

原文:Win10 UWP开发系列--开源控件库:UWPCommunityToolkit 在开发应用的过程中,不可避免的会使用第三方类库.之前用过一个WinRTXamlToolkit.UWP,现在微软官方发布了一个新的开源控件库—— UWPCommunityToolkit 项目代码托管在Github上:https://github.com/Microsoft/UWPCommunityToolkit 包括以下几个类库: 都可以很方便的从Nuget上安装. NuGet Package Name des

Win10 UWP开发系列:实现Master/Detail布局

在开发XX新闻的过程中,UI部分使用了Master/Detail(大纲/细节)布局样式.Win10系统中的邮件App就是这种样式,左侧一个列表,右侧是详情页面.关于这种 样式的说明可参看MSDN文档:https://msdn.microsoft.com/zh-cn/library/windows/apps/xaml/dn997765.aspx 样式如下: 在微软官方的Sample里,有这种样式的代码示例,下载地址:https://github.com/Microsoft/Windows-univ

Win10 UWP 开发系列:支持异步的SQLite

上篇文章已经实现了在UWP中使用SQLite作为本地存储,作为移动端的程序,及时响应用户的操作是提高用户体验的重要途径,因此UWP的很多api都是异步的.那么如何使SQLite支持异步呢? 参考SQLite.Net-PCL的github页面:https://github.com/oysteinkrog/SQLite.Net-PCL 可以看到SQLite.Net-PCL是支持异步的,在创建数据库链接的时候,可以创建同步的SQLiteConnection,也可以创建异步的SQliteAsyncCon

Win10 UWP 开发系列:使用SplitView实现汉堡菜单及页面内导航

在Win10之前,WP平台的App主要有枢轴和全景两种导航模式,我个人更喜欢Pivot即枢轴模式,可以左右切换,非常方便.全景视图因为对设计要求比较高,自己总是做不出好的效果.对于一般的新闻阅读类App来说,Pivot更适合多个频道的展示,因为内容基本都是一样的. 到了Win10,微软模仿其他平台也推出了汉堡菜单,但并没有提供现成的控件,而是需要开发者通过一个名为SplitView的控件来实现.我个人并不觉得左上角的菜单有多么方便,汉堡菜单的使用必然会改变以前的导航模式,比如以前底部的AppBa

Win 10 UWP开发系列:设置AppBarButton的图标

在WP8以前,页面最下面的四个小圆按钮是不支持绑定的,WP8.1 RT之后,系统按钮升级成了AppBarButton,并且支持绑定了.在Win10 UWP开发中,按钮的样式发生了变化,外面的圆圈没有了.不过个人还是更喜欢之前的圆按钮的样子^_^ 很喜欢Metro Studio这个程序,有数百个好看的按钮可以用,并且可以导出成png图片.但现在不建议采取png图片的方式了,主要是因为png在缩放后有可能会失真,最好使用字体.path等矢量的方式来实现.以下介绍几种设置AppBarButton图标的

C#程序员学习Android开发系列之SQLite

上篇博客提到过SQLite,它是嵌入式数据库,由于其轻巧但功能强大,被广泛的用于嵌入式设备当中.后来在智能手机.平板流行之后,它作为文件型数据库,几乎成为了智能设备单机数据库的必选,可以随着安卓app打包到apk文件当中. SQLite的官方网站是http://www.sqlite.org/,可以任意下载,上面也有详尽的文档可以参考,这篇博客重点关注SQLite在Android开发中如何使用. 在Android开发中,推荐建立一个类继承自SQLiteOpenHelper来创建数据库操作类,比如:

Win10/UWP开发—使用Cortana语音与App后台Service交互

上篇文章中我们介绍了使用Cortana调用前台App,不熟悉的移步到:Win10/UWP开发—使用Cortana语音指令与App的前台交互,这篇我们讲讲如何使用Cortana调用App的后台任务,相比调用前台的App,调用后台任务有个有点就是App不用被启动即可为用户提供服务. 要想使用Cortana调用App后台任务,首先我们需要定义VCD文件,我们依旧使用上篇中的代码,让它支持Cortana调用后台任务. 创建后台任务 新增一个[Windows运行时组件]项目,暂时起名叫做:XiaoMiBa