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

转载 2016年01月05日 10:00:34

上篇文章已经实现了在UWP中使用SQLite作为本地存储,作为移动端的程序,及时响应用户的操作是提高用户体验的重要途径,因此UWP的很多api都是异步的。那么如何使SQLite支持异步呢?


参考SQLite.Net-PCLgithub页面:https://github.com/oysteinkrog/SQLite.Net-PCL


可以看到SQLite.Net-PCL是支持异步的,在创建数据库链接的时候,可以创建同步的SQLiteConnection,也可以创建异步的SQliteAsyncConnection


SQliteAsyncConnection

The SQLiteAsyncConnection class now takes a Func in the constructor instead of a path. This is done because the async classes are now just meant to be wrappers around the normal sqlite connection.

To use SQLiteAsyncConnection just create an instance of a SQLiteConnectionWithLock and pass in that through a func, e.g.: new SQLiteAsyncConnection(()=>_sqliteConnectionWithLock);

Please be aware that the Task.Run pattern used in SQLiteAsyncConnection can be considered an anti-pattern (libraries should not provide async methods unless they are truly async). This class is maintained for backwards compatability and for use-cases where async-isolation is handy.


在之前的版本中,创建SQLiteAsyncConnectionSQLiteConnection的写法是类似的,都是传入一个数据库文件地址即可,但新版本中异步的构造函数有点变化,需要传入一个Func


接下来我们看一下如何使用异步的方式来使用SQLite


一、添加SQLite.Net.Async-PCL支持


还是在上个例子里直接改吧,首先我们之前添加的SQLite.Net-PCL是不支持异步的,需要添加另一个nuget包:



装了这个就可以使用异步的了。


二、创建异步的数据库链接


public SQLiteAsyncConnection GetDbConnectionAsync()

 

{

var connectionFactory = new Func<SQLiteConnectionWithLock>(() => new SQLiteConnectionWithLock(new SQLitePlatformWinRT(), new SQLiteConnectionString(DbFilePath, storeDateTimeAsTicks: false)));

var asyncConnection = new SQLiteAsyncConnection(connectionFactory);

return asyncConnection;

把初始化方法改为:

public async Task InitAsync()

 

{

 

DbFilePath = Path.Combine(Windows.Storage.ApplicationData.Current.LocalFolder.Path, DbFileName);

var db = GetDbConnectionAsync();

await db.CreateTableAsync<UserItem>();

 

}

注意要在StartupFunctions.cs文件里调用这个异步的,把原来那个Init方法注释掉。


三、异步访问数据库


其实之后就没有太多可说的了,就是把原来的同步方法改成异步的就可以了,比如插入数据:

public async Task<int> InsertUserAsync(UserItem item)

 

{

int result = 0;

var conn = DbContext.Instance.GetDbConnectionAsync();

 

result = await conn.InsertAsync(item);

return result;

 

}

获取全部数据:

public async Task<List<UserItem>> GetAllUserAsync()

 

{

 

List<UserItem> result = new List<UserItem>();

var conn = DbContext.Instance.GetDbConnectionAsync();

 

result = await conn.Table<UserItem>().ToListAsync();

return result;

 

}



 查询的话可以这样:

public async Task<List<UserItem>> GetUserListAsync(string key)

 

{

 

List<UserItem> result = new List<UserItem>();

var conn = DbContext.Instance.GetDbConnectionAsync();

 

result = await conn.Table<UserItem>().Where(x => x.UserName.Contains(key)).ToListAsync();

return result;

 

}

其他几个UpdateDelete也有相应的异步方法,就不写了。

还有几个方法是QueryAsyncExecuteAsyncExecuteScalarAsync等等,都可以直接执行sql语句,例如:

public async Task<int> GetUserCount()

 

{

var conn = DbContext.Instance.GetDbConnectionAsync();

return await conn.ExecuteScalarAsync<int>("select count(*) from UserItem");

 

}

建议使用异步的方式以获得更好的性能。


开发者交流群:53078485期待您的加入!

相关文章推荐

SQLite剖析(10):异步IO模式、共享缓存模式和解锁通知

下面介绍SQLite的一些扩展模块。本文整理自http://sqlite.org/docs.html。     1、异步I/O模式     通常,当SQLite写一个数据库文件时,会等待,直到写操作完...

Delphi7高级应用开发随书源码

  • 2003年04月30日 00:00
  • 676KB
  • 下载

UWP SQLite的使用

sqlite的使用

[UWP]在UWP中使用EntityFrameworkCore + SQLite

简要介绍在UWP程序中如何使用EntityFrameworkCore+SQL
  • lzl1918
  • lzl1918
  • 2016年08月14日 15:18
  • 1303

[UWP小白日记-1]判断APP是否是第一次运行初始化SQLITE数据库

利用应用程序设置来实现此功能。   1.首先,获取APP设置的容器: ApplicationDataContainer localSettings = ApplicationData.Curr...
  • Enious
  • Enious
  • 2016年09月23日 21:30
  • 541

Win10 UWP 开发系列:使用SQLite

在App开发过程中,肯定需要有一些数据要存储在本地,简单的配置可以序列化后存成文件,比如LocalSettings的方式,或保存在独立存储中。但如果数据多的话,还是需要本地数据库的支持。在UWP开发中...
  • igweyou
  • igweyou
  • 2015年12月31日 10:16
  • 1046

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

在WP8以前,页面最下面的四个小圆按钮是不支持绑定的,WP8.1 RT之后,系统按钮升级成了AppBarButton,并且支持绑定了。在Win10 UWP开发中,按钮的样式发生了变化,外面的圆圈没有了...
  • igweyou
  • igweyou
  • 2016年01月12日 10:12
  • 1643

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

在Win10之前,WP平台的App主要有枢轴和全景两种导航模式,我个人更喜欢Pivot即枢轴模式,可以左右切换,非常方便。全景视图因为对设计要求比较高,自己总是做不出好的效果。对于一般的新闻阅读类Ap...
  • igweyou
  • igweyou
  • 2016年01月14日 13:27
  • 1665

win10 uwp 异步进度条

本文主要讲我设计的几个进度条,还有如何使用异步控制进度条,如何使用动画做进度。进度条可以参见:http://edi.wang/post/2016/2/25/windows-10-uwp-modal-p...

Win10/UWP新特性系列—使用打印机

微软在Win10时代终于完成的设备系统的大统一,"56个民族,56支花……"(⊙o⊙)…,既然统一了,那么也就意味着API也统一了,所以在UWP中,我们就可以使用统一的打印API来为设备(包括移动设备...
  • igweyou
  • igweyou
  • 2015年12月10日 09:26
  • 993
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Win10 UWP 开发系列:支持异步的SQLite
举报原因:
原因补充:

(最多只允许输入30个字)