SQLiteDatabaseLockedException
来源:互联网 发布:php实现硬件设备对接 编辑:程序博客网 时间:2024/05/21 02:33
错误日志:
android.database.sqlite.SQLiteDatabaseLockedException: database is locked (code 5): , while compiling: PRAGMA journal_modeat android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:164)at com.ivcar.weibo.support.database.FriendsTimeLineDBTask.getWsd(FriendsTimeLineDBTask.java:50)
遇到这个问题,有以两种可能:
(1)多线程访问造成的数据库锁定。
如A线程在访问当前的数据库,这时候B线程也需要访问数据库,这样在B线程中,就会有类似以上的异常产生,我们需要将提供数据库访问的方法设置成同步的,防止异步调用时出现问题,如在调用方法中增加 synchronized 修饰符。
使用synchronized 关键字来修饰获取数据库连接的方法,或者使用isDbLockedByOtherThreads方法判断数据库是否被锁住了,然后等待一定的时间再进行访问。
参考:http://bbs.9ria.com/thread-247178-1-1.html
(2)执行事务操作未正常关闭。
如下面代码,使用事务操作数据库,但事务执行完成后未调用db.endTransaction();关闭事务。
//获取行业列表
public ArrayList GetIndustryList(){ArrayList IndustryList=new ArrayList();SQLiteDatabase db=openDatabase();db.beginTransaction();Cursor cursor = db.rawQuery("select * from dcIndustry",null);while(cursor.moveToNext()){IndustryList.add(new Industry(cursor.getString(0),cursor.getString(1)));}db.close();return IndustryList;}
Android 4.0以前的版本db.close();会结束事务,而Jelly Bean 以后的版本因为安全性的问题,必须结束即endTransactiony以后才能再次访问本地数据库。
(3)sqlite自身的问题
有时我们会在调试程序的时候发现Log控制台频繁的出现上述异常,而在运行程序的时候就没有这个问题,这种现象我在调试ResultSet时也会出现,查资料找原因是因为sqlite数据不完全是线程安全的,导致在一些地方会莫名其妙的出问题,如果遇到这样的情况,那只能不要将断点打到数据库连接的地方了。
0 0
- SQLiteDatabaseLockedException
- Android Exception - SQLiteDatabaseLockedException
- Android SQLiteDatabaseLockedException: database is locked
- Android SQLiteDatabaseLockedException: database is locked
- SQLiteDatabaseLockedException: database is locked 解决方法
- 解决android: SQLiteDatabaseLockedException: database is locked
- Android SQLite数据库SQLiteDatabaseLockedException异常分析及处理
- Android SQLite数据库SQLiteDatabaseLockedException异常分析及处理
- android.database.sqlite.SQLiteDatabaseLockedException: database is locked (code 5)
- Android Database 并行访问 SQLiteDatabaseLockedException: database is locked 解决方案
- android.database.sqlite.SQLiteDatabaseLockedException: database is locked (code 5)问题解决
- Android开发:SQLiteDatabaseLockedException异常的解决方案(SQLite单例模式)
- android.database.sqlite.SQLiteDatabaseLockedException: database is locked (code 5): , while compilin
- 顺序查找
- Unity如何使用WWW类和协程完成图片、视频下载播放(一)
- sqlserver翻页
- 参数数据类型 sql_variant 对于 like 函数的参数 1 无效。
- 我的第一篇内容
- SQLiteDatabaseLockedException
- hello
- 【Shell脚本】逐行处理文本文件 && 空格变换行
- Elasticsearch搜索引擎学习记录2-数据同步
- Android 图片单选/多选、拍照、裁剪、压缩。视频选择和录制
- java中的标识符和注释的相关基础
- qt-02-国际化软件文本
- Log4J的简单使用
- Android studio Gradle Error:Configuration with name 'default' not found.