2 markdowneide markdowneide 于 2013.03.20 11:08 提问

SQLiteException: database is locked 异常

在我的content provider 中为什么会出现'SQLiteException: database is locked' 异常?我是在 Provider constructor 中调用的。

mDb = SQLiteDatabase.openDatabase(path, null, 0);

03-17 19:44:43.912  6830  6830 E AndroidRuntime: FATAL EXCEPTION: main
03-17 19:44:43.912  6830  6830 E AndroidRuntime: android.database.sqlite.SQLiteException: database is locked
03-17 19:44:43.912  6830  6830 E AndroidRuntime:    at android.database.sqlite.SQLiteDatabase.dbopen(Native Method)
03-17 19:44:43.912  6830  6830 E AndroidRuntime:    at android.database.sqlite.SQLiteDatabase.<init>(SQLiteDatabase.java:1990)
03-17 19:44:43.912  6830  6830 E AndroidRuntime:    at android.database.sqlite.SQLiteDatabase.openDatabase(SQLiteDatabase.java:905)
03-17 19:44:43.912  6830  6830 E AndroidRuntime:    at com.mycompany.myapplication.provider.MyContentProvider.query(MyContentProvider.java:356)

2个回答

ssummeraw
ssummeraw   2013.03.27 17:02
已采纳

每次你是想打开好几回数据库,但是这是不可以的。
数据库 handler 类就是用来阻止数据库可以多次打开。

还有更好的解决方法是当你在 android 中继承 SQLiteOpenHelper 类,它会自动确保数据库中能被打开一次。

CSDN_Ask
CSDN_Ask   2013.03.27 17:25

如果另一个数据库 handler 也寻找数据库,数据库被锁定异常就会发生。

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
Android SQLiteException: database is locked异常的解决办法
Android系统支持sqlite数据库,这给我们的使用带来了很大的方便。但使用Android系统访问sqlite数据库时,有时可能会遇到android.database.sqlite.SQLiteException: database is locked异常,例如 这个异常基本上由两个原因引起的 1、sqlit自身问题 有时我们会在调试程序的时候发现Log控制台频繁的出现上述异
解决android: SQLiteDatabaseLockedException: database is locked
上网百度了很多,有用信号量、synchronize、lock的等等 我选用了单例模式, 因为同时只能有一个SQLiteOpenHelper访问sqlite数据库,如果同时有两个SQLiteOpenHelper访问sqlite则报错:SQLiteDatabaseLockedException: database is locked 看我的方法: package DAO; import an
解决SQLite中的 database is locked
前些时候,同事在站点服务端使用SQlite存储一些临时数据,但是在多人并发的时候Sqlite会抛出异常:The database file is locked , database is locked,而且这个是在客户生产环境下提示出来的,开发环境很难重现,同事实在没辙,竟然想发动所有研发同事通过操作软件重现问题,我只能呵呵了。既然是Sqlite的原因,直接写个小程序测试下sqlite不就行了,而
database is locked和SQLITE_BUSY
这是官方文档:http://www.sqlite.org/cvstrac/wiki?p=DatabaseIsLocked 下面我做了几个实验: 1、多个线程(pthread),使用同一个句柄(一次sqlite3_open,同一个数据库文件),在多个线程中同时使用此句柄,这些线程中有的是进行select操作的,有的是进行update操作的,使用的都是sqlite3_exec函数;结果是没
SQLiteException: database is locked异常的解决办法
转自:1. http://blog.csdn.net/sdsxleon/article/details/18259973            2.http://blog.csdn.net/lizzy115/article/details/8016066            3.
解决sqlite死锁示例异常database is locked
/* * sqlite的连接方式实际上为单连接方式,即使实用多线程也是用的一个连接 * getWritableDatabase()和getReadableDatabase()都为synchronized方法,但不是static方法 * 所以都只对同一个对象起同步作用,对于不同的对象没有任何作用 * 所以使用sqlite的时候可以提供一个单一的入口,防止多对象修改数据库而造成死锁 * 所以
sqlite3解决A table inthe database is locked
昨天写sqlite3数据库插入函数,总是只能插入一条数据,第二次数据插入不了,得到的报错信息是rc = 6,A table inthe database is locked 因为我在插入之前调用了sqlite3_prepare(),被操作的表被SQL 语句编译后的字节码绑定,所以我想应该使用函数sqlite3_finalize()释放分配给字节码的内存空间   sqlite3_finaliz
android.database.sqlite.SQLiteDatabaseLockedException: database is locked (code 5)问题解决
//忘记原作者连接,请见谅。 public class DatabaseManager {     private AtomicInteger mOpenCounter = new AtomicInteger();     private static DatabaseManager instance;     private static SQLiteOpenHelper mDa
sqlite3 database is locked 问题解决方案
sqlite3 database is locked 问题解决方案 sqlite3只支持一写多读. 读与读可以同时进行 读与写不可同时进行 写与写不可同时进行 解决方案1这个问题可以用线程间的同步方案来解决.同步方案的话有多种,但读写锁最适合这个问题. 这个问题和读写锁不谋而合,所以可以用读写锁来解决这个问题. 当然也可以用其他线程间同步方案来解决. 针对读写锁,请参阅线程与读写锁解决方
sqlite The database file is locked database is locked
SQLite只支持库级锁,库级锁意味着什么?——意味着同时只能允许一个写操作,也就是说,即事务T1在A表插入一条数据,事务T2在B表中插入一条数据,这两个操作不能同时进行,即使你的机器有100个CPU,也无法同时进行,而只能顺序进行。 发生这个错误,赶紧往上翻代码,看看是不是有SQLiteDateReader 对象没有关闭!关闭即可!(我就被这个坑到了!)