SQLite事务问题求解

zhujunhua2012 2014-10-31 05:01:26
先说下使用场景:
从服务器下载数据后,会有一组相同结构的数据,for循环存入数据库中,如果不手动开启事务,耗时较长;开启事务后,时间大大缩短(前者的几十分之一的时间)。但是这种情况下,可能有多个线程在访问数据库,有的时候就会抛出如下异常:

W/SQLiteConnectionPool(15869):The connection pool for database '/data/data/....db' has been unable to grant a connection to thread 311407(AsyncTask#5) with flags 0x1 for 30.15901 seconds.
W/SQLiteConnectionPool(15869):Connections:0 active, 1 idle, 0 available.


数据库已经是单例模式,但是没有使用线程同步。
看过网络上一些解决方案,把#endTransaction放在finally里,但是这样并不能解决问题,求大神指点。。。
...全文
428 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhujunhua2012 2014-11-05
  • 打赏
  • 举报
回复
目前先 将数据库操作类 写成单例模式了,然后 数据库方法 加synchronized,实在没有办法了,先看看效果吧。。。
DrSmart 2014-11-04
  • 打赏
  • 举报
回复
开启事务会锁表的,即使是单例下所有写操作都会失败的。上面那个不是解决方案如果写操作频繁的话
zhujunhua2012 2014-11-04
  • 打赏
  • 举报
回复
谢谢,先看看。。。
引用 3 楼 birdsaction 的回复:
我在stackflow上面找到了一个解决方法,你参考一下, http://stackoverflow.com/questions/2493331/what-are-the-best-practices-for-sqlite-on-android
Birds2018 2014-10-31
  • 打赏
  • 举报
回复
我在stackflow上面找到了一个解决方法,你参考一下, http://stackoverflow.com/questions/2493331/what-are-the-best-practices-for-sqlite-on-android
zhujunhua2012 2014-10-31
  • 打赏
  • 举报
回复
有的服务器下发数据量比较大,比如1000条数据的写入,放在一个事务里面,大概需要6秒左右,如果加上同步锁,其他操作(比如新进入一个界面,数据需要展示,而前面这个1000条数据写入可能是其他线程的后台操作,正在操作数据库)就会阻塞,怕影响用户体验。
引用 1 楼 birdsaction 的回复:
如果多个线程访问数据库 建议加上同步锁,让数据库操作锁住 这样简单点。
Birds2018 2014-10-31
  • 打赏
  • 举报
回复
如果多个线程访问数据库 建议加上同步锁,让数据库操作锁住 这样简单点。

80,351

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧