Win10 UWP 开发系列:使用SQLite

原文: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-10-30 05:09:41

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

Win10 UWP 开发系列:使用多语言工具包让应用支持多语言

原文:Win10 UWP 开发系列:使用多语言工具包让应用支持多语言 之前我在一篇blog中写过如何使用多语言工具包,见http://www.cnblogs.com/yanxiaodi/p/3800767.html 在WinEcos社区也发布过一篇详细的文章介绍多语言工具包的使用,但因社区改版那篇文章已经找不到了. 当时写的时候还没有出Win10的SDK,都是基于UAP框架写的.微软早已经发布了Win10的SDK,相应的项目结构也发生了变化,以前分为两个项目通过Share项目共享代码的方式被抛弃

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

原文:Win10 UWP开发系列:使用VS2015 Update2+ionic开发第一个Cordova App 安装VS2015 Update2的过程是非常曲折的.还好经过不懈的努力,终于折腾成功了. 如果开发Cordova项目的话,推荐大家用一下ionic这个框架,效果还不错.对于Cordova.PhoneGap.ionic.AngularJS这些框架或库的关系,我个人理解是这样,PhoneGap是一个商业项目,用来实现HTML5式的跨平台开发,后来Adobe公司将其中的核心代码开源,就是Co

Win10 UWP开发系列:开发一个自定义控件——带数字徽章的AppBarButton

原文:Win10 UWP开发系列:开发一个自定义控件--带数字徽章的AppBarButton 最近有个项目有一个这样的需求,在文章浏览页底部有几个AppBarButton,其中有一个是评论按钮,需要在评论按钮上显示一个红色数字,类似微信的新消息提醒: 这种设计在iOS和Android平台都是很常见的,但UWP上并没有提供现成的控件.所以只能自己实现一个了.   做出来效果是这样的:   分析一下实现的思路.首先这还是一个AppBarButton,只是其中增加了一个数字徽章的显示,这个属性应该是可

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

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

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

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

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

原文: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:

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

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

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

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

“Win10 UAP 开发系列”之主题模式切换

原文:"Win10 UAP 开发系列"之主题模式切换 微软动作真是快,本来想写WP8.1RT系列,结果刚整理了一点就出Win10 UAP了.不过还好RT到Win10的差别还不算太大.前两天参加了Win10开发极客秀,虽然没获奖,不过在韦恩卑鄙的帮助下顺利将澎湃新闻WP8.1版升级到了Win10UAP,使用了一些新的特性,最近争取有时间慢慢把一些东西总结一下. 今天先说一下如何在Win10 UAP中切换主题模式. 切换日间.夜间主题模式这个功能我从WP8就实现了,并封装成了一个库,用在我