SQLite数据库并发性
如何实现SQLite数据库的并发性?根据文档,可以使用WAL(预写日志)。但是,我不知道如何实现它。SQLite数据库并发性
在我的应用程序中,我想从主线程读取数据,同时后台线程正在写/插入一些数据在同一个表中。在执行读取和写入查询的同时,应用程序停止响应,直到插入未完成。 SQLite中是否可以实现并发性,以及如何实现?
您需要使用DataBase
对象的单例对象。为此,您可以使用ContentProvider
。哪个是实现并发性的更好选择。
这里是ContentProvider
http://www.vogella.com/articles/AndroidSQLite/article.html
链接教程你可以参考的文档也 http://developer.android.com/guide/topics/providers/content-providers.html
是的,它可以通过ContentProvider实现,但是,正如我提到的那样,如何使用WAL? –
@PorasBhardwaj来实现,我也不知道如何实现WAL。 –
“我想读数据从主线程数据库“: - >请不要这样做。它会挂起你的用户界面直到执行数据库读取调用。总是在后台线程上做。
按照我的理解,SQLite处理并发本身,所以我们不需要担心它。
您可以使用Content Provider
通过使用它的insert()
方法更新数据库。一旦插入完成,你可以通知所有使用下面的代码在insert()
方法注册Content Observer
有关数据库的变化:
getContext().getContentResolver().notifyChange(uri, null);
创建,注册和注销ContentObserver
。请点击here。
请通过后台线程或AsyncQueryHandler
致电所有Content Provider相关操作。你可以知道更多关于AsyncQueryHandler
here。
让我知道更多的细节需要或是否有帮助:)
我完全接受Nigam Patro的回答,提到我推荐使用Greenrobot的GreenDAO与内容提供商,Singleton方法!
为什么选择GreenDao?
- 最高性能(可能是Android上最快的ORM)。
- 易于使用的API。
- 针对Android进行了高度优化。
- 最小的内存消耗。
- 小型库的大小,关注要领,代码生成器。
境界也趋向ORM与替代sqlite的,但直到他们为Content Provider提供支持,我不使用它!
除此之外还有很多RxJava移植提供ORM库看看到,一旦你掌握一些RxJava基础(最艰难的事情,费时费力,但它最大限度地减少了编码工作)
我认为,内容提供商+最小化的SQLite ORM framowrk + RxJava支持将解决Android中的大部分ORM问题。
当您打开数据库并获取SQLite Db的实例时,您需要启用WLA我猜测http://developer.android.com/reference/android/database/sqlite/SQLiteDatabase.html方法:enableWriteAheadLogging – virendrao
“我想读取数据从主线程上的数据库“: - >请不要这样做。在后台线程中从数据库读取数据并从主线程更新您的UI。 –
@virendrao我已经改变了这一点。我正在使用SQLChipher库,并没有像enableWriteAheadLogging这样的方法。 Thnaks。 –