码迷,mamicode.com
首页 > 移动开发 > 详细

安卓 SQLite error:SQLite database locked exception while compling : PRAGMA journal_mode .....

时间:2014-10-09 01:20:27      阅读:280      评论:0      收藏:0      [点我收藏+]

标签:android   io   os   数据   sp   c   问题   on   cti   

项目中频繁的切换Tab键,会频繁地从数据库读取数据,这是报出这样的错误:

解决方法是在国外的某论坛找到的 :

在插入数据的时候,首先:

SQLiteDatabase db = SQLiteDatabase.openOrCreateDatabase(f, null);
db.beginTransaction();   ////开启一个事务
db.insert(HJZ_SQLiteOpenHelper.TABLE_NAME_KP, null, cv);
db.setTransactionSuccessful(); //必须加这一句,否则插入不了数据
db.endTransaction();  ////关闭一个事务
db.close();

 

原因:是4.0以前的版本db.close();会结束事务,而Jelly Bean 以后的版本因为安全性的问题,必须结束即endTransactiony以后才能再次访问本地数据库。哎。。苦逼的百度啊。。另外,吐槽一下不向下兼容的Android

PS:android中,对数据库进行批量操作时,建议先打开会话:

db.beginTransaction();

//批量insert或者update等
db.setTransactionSuccessful();
db.endTransaction();

 

这样之后,在大数据量的处理是灰常的高效,

实际中,减少了3~10倍的时间。

 

另外,在重写ContentProvider时,不要针对数据的读写加同步了,因为底层数据库已经做了同步保护,上层再加上同步保护多余,而且非常影响效率。

安卓 SQLite error:SQLite database locked exception while compling : PRAGMA journal_mode .....

标签:android   io   os   数据   sp   c   问题   on   cti   

原文地址:http://www.cnblogs.com/lucky-star-star/p/4011840.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!