在win10 UWP开发中,我们可以使用SQLite。本篇文章说一下如何在UWP中使用SQLite。因为SQLite是跨平台的,版本众多,我刚开始用的时候不知道要装哪个,什么WP8的、WP8.1的、Win RT的……简直摸不着头脑。希望这篇文章能让大家少走点弯路。
一、添加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上,应该就很简单了。
对了还有那个单例的基类,也附在这里:
补充一篇 win UWP开发中使用SQLite数据库
环境配置
1.下载和安装SQLite
要使用sqlite,首先是要从sqlite.org下载SQLite啦,附上下载页的链接http://sqlite.org/download.html,然后选择UAP的版本:
下载下来的是一个VSIX的安装包,安装后重启VS,选择Tools -> Extensions and Updates… ->
Installed -> SDKs中,会看到SQLite for Universal App Platform,说明SQLite已经安装完成!!
2.在工程中添加对SQLite的引用
现在,在我们的VS中,已经有了SQLite的集成,在相应工程目录下添加对SQLite的引用即可,右键点击References ?> Add
Reference,选择对SQLite的添加。
3.添加.Net支持
如果要使用C#的开发,还需要对工程本身进行进一步的配置,这就需要NuGet的帮助了。
右键点击工程名,选择Manage NuGet Packages…,然后搜索SQLitePCL,Install即可。
安装完成后,在Project的References里,便会多出一个SQLitePCL的引用。
图中红色方块里圈出的部分,其中上面的是对SQLite的引用,下面的是对SQLitePCL的引用。
在此完成之后,就可以使用SQLite开发了!!当然,在相应的文件中,不要忘了添加using SQLitePCL哦!!
定义SQL语句常量
在实际开发中,通常是把SQL语句统一起来进行管理,有的开发者在使用db过程中也喜欢使用一些Contract来使编码更加规范,为了更加清晰明了,这里只提供一些最基本的SQL语句供大家参考。
private static String DB_NAME = "SQLiteSample.db";
private static String TABLE_NAME = "SampleTable";
private static String SQL_CREATE_TABLE = "CREATE TABLE IF NOT EXISTS " +
TABLE_NAME + " (Key TEXT,Value TEXT);";
private static String SQL_QUERY_VALUE = "SELECT Value FROM " + TABLE_NAME + "
WHERE Key = (?);";
private static String SQL_INSERT = "INSERT INTO " + TABLE_NAME + "
VALUES(?,?);";
private static String SQL_UPDATE = "UPDATE " + TABLE_NAME + " SET Value = ?
WHERE Key = ?";
private static String SQL_DELETE = "DELETE FROM " + TABLE_NAME + " WHERE Key
= ?"
建立第一张表
当你定义好一些SQL命令之后,就可以对数据库进行一系列的操作,最基本的当然是create table啦,以下给出实例代码:
_connection = new SQLiteConnection(DB_NAME);
using (var statement = _connection.Prepare(SQL_CREATE_TABLE))
{
statement.Step();
}
由于执行SQL语句的代码大致一样,所以不过多赘述,给出样例代码,其中key和value都是String变量。
INSERT
using (var statement = _connection.Prepare(SQL_INSERT))
{
statement.Bind(1, key);
statement.Bind(2, value);
statement.Step();
}
DELETE
using (var statement = _connection.Prepare(SQL_DELETE))
{
statement.Bind(1, key);
statement.Step();
}
UPDATE
using(var statement = _connection.Prepare(SQL_UPDATE))
{
statement.Bind(1, value);
statement.Bind(2, key);
statement.Step();
}
QUERY
using (var statement = _connection.Prepare(SQL_QUERY_VALUE))
{
statement.Bind(1, key);
SQLiteResult result = statement.Step();
if (SQLiteResult.ROW == result)
{
value = statement[0] as String;
}
}
值得说明的是,在statement执行Step()的过程中,会返回一个SQLiteResult的返回值,在遍历返回结果的过程中,判断
result是不是SQLiteResult.ROW就可以,关于SQLiteResult的具体内容,请参考SQLite.org的文档说明。
其它
说了半天使用SQLite开发,那么我们创建出来的数据库究竟在存放在哪里呢?系统默认是放在这个路径的:C:\Users\(username)
\AppData\Local\Packages\(packagename)\LocalState,其中username当然就不用小编解释了,当然就是您的用户名喽!packagename可以在工程目录里面的Package.appxmanifest文件里查看,如图:
在这个路径下,我们能找到以我们的DB_NAME命名的文件,如SQLiteSample.db。
那么,我们怎么才能查看这种数据库呢,这里有许多第三方工具可以使用,小编比较推荐SQLite
Expert,界面简单友好,使用方便,并且有personal的版本,完全免费哦。
结语
在uwp开发中,使用SQLite是一件很简单的事情,配合windows强大的存储功能和简洁的开发接口,让我们一起来开发美妙的uwp
application吧!
以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索数据库
, sqlite
, 开发
, 文件
, 代码
using
uwp通用应用开发教程、uwp sqlite、uwp sqlite 事务、uwp通用应用、uwp开发教程,以便于您获取更多的相关知识。