安卓 SQLite error:SQLite database locked exception while compling : PRAGMA journal_mode .....
项目中频繁的切换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时,不要针对数据的读写加同步了,因为底层数据库已经做了同步保护,上层再加上同步保护多余,而且非常影响效率。