SQLBrite:一个响应式的数据查询框架

这篇文章是Square公司的技术文章,作者是Jake Wharton -译者注。

从一开始,安卓中数据的存储、查询、更新就一直没有变过。去年,我们为了满足一连串的需求,在分析了16个library之后,发现没有一个项目能达到我们的目的,因此决定着手编写自己的解决方法。

SQLite显然是复杂数据保存与查询的首选方案。经过设计与讨论之后,我们构建了一个简化应用SQLite操作的完整方案的原型。这个原型的特性包括诸如自动创建与迁移表格,行的对象映射、类型安全的查询,以及在数据变更时的通知。

当将之和Square Cash整合的时候,我们发现虽然这个原型的概念非常好,但是其实现有点笨重。因此几周前我们重构了代码,以达到在保留思想的同时,让结构也更合理。

SQLBrite是这次努力的第一个发行版本,后面的增量都将基于这个版本。 我们使用RxJava observables 的订阅模式来查询 ,而不是直接执行查询:

1
2
3
4
5
6
7
Observable<Query> users = db.createQuery( "user" "SELECT * FROM user" );
users.subscribe( new  Action1<Query>() {
   @Override public void call(Query query) {
     Cursor cursor = query.run();
     // TODO parse data...
   }
});

我们不企图掩盖SQL,Cursor或者SQLiteOpenHelper的概念(这和contentprovider的思想完全相反)。而是将这三个概念赋予“数据更新的通知”。当一个表格的数据因为插入,修改,或者删除而变更时,该数据的订阅者将会随之变更。

1
2
3
4
5
6
7
8
9
10
11
12
13
final AtomicInteger count =  new  AtomicInteger();
users.subscribe( new  Action1<Query>() {
   @Override public void call(Query query) {
     count.getAndIncrement();
   }
});
System.out.println( "Queries: "  + count.get());  // Prints 1
 
db.insert( "user" , createUser( "jw" "Jake Wharton" ));
db.insert( "user" , createUser( "mattp" "Matt Precious" ));
db.insert( "user" , createUser( "strong" "Alec Strong" ));
 
System.out.println( "Queries: "  + count.get());  // Prints 4

当多个操作不断的刷新数据时,UI会实时的更新,而不是静止不变。

sqlbrite.png

 SQLBrite的源码开放在GitHub的 github.com/square/sqlbrite 。在社区的共同努力下会越来越完善。


原文 SQLBrite: A Reactive Database Foundation 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值