我能为当前线程锁定SQLite表格吗?

5
我的应用程序使用一个SQLiteDatabase来管理所有数据,并由多个线程访问。
目前,我一直在将所有DB调用都同步到数据库本身上。
我这样做的原因是,偶尔我想要通过从服务器获取最新版本并从头开始重建表格来刷新表格。为了节省时间,我实际上正在创建第二个表格,然后在完成时替换原始表格(在此期间使用同步锁定它)。
问题是,如果我的SQL调用尝试在复制表时运行,则可能偶尔会出现SQL调用停顿很长时间(由于同步锁),或者会出现错误。
有没有办法在刷新时从其他操作中锁定我的数据库,但同时允许操作A、B、C等并发运行?
干杯!
1个回答

0
我相信你需要的是ReadWriteLock。基本上,它在你的数据库上放置了两个不同的锁,一个用于读取,一个用于写入。当写锁被锁定时,没有其他人可以读取或写入。如果任何一个读锁被锁定(由任意数量的线程),写锁将无法锁定,直到所有人完成读取。

是的!这正是我正在寻找的!对于我所做的事情来说,比同步要好得多。谢谢! :) - isep
@isep 你好,我在黑莓开发中遇到了一些麻烦。我需要使用多线程来访问数据库的打开、关闭、插入、更新和删除操作,请问你能提供一些解决方案或者在BB中的好例子吗?目前我只是通过跟踪数据库的打开和关闭次数来实现这个功能。但有时会出现“数据库例程序列错误”的问题。 - Herry

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接