LotusLoveNature

日常工作,生活小记

android.database.sqlite.SQLiteException: error cod

08-02 11:55:43.835 E/Database(20401): Error updating iscur=0 using UPDATE browserdata SET iscur=? WHERE iscur=?


08-02 11:55:43.835 E/DatabaseUtils(20401): Writing exception to parcel


08-02 11:55:43.835 E/DatabaseUtils(20401): android.database.sqlite.SQLiteException: error code 5: database is locked


08-02 11:55:43.835 E/DatabaseUtils(20401): at android.database.sqlite.SQLiteStatement.native_execute(Native Method)


08-02 11:55:43.835 E/DatabaseUtils(20401): at android.database.sqlite.SQLiteStatement.execute(SQLiteStatement.java:61)


08-02 11:55:43.835 E/DatabaseUtils(20401): at android.database.sqlite.SQLiteDatabase.updateWithOnConflict(SQLiteDatabase.java:1736)


08-02 11:55:43.835 E/DatabaseUtils(20401): at android.database.sqlite.SQLiteDatabase.update(SQLiteDatabase.java:1665)


08-02 11:55:43.835 E/DatabaseUtils(20401): at com.tencent.qube.db.QubeBrowserDataProvider.update(QubeBrowserDataProvider.java:82)


08-02 11:55:43.835 E/DatabaseUtils(20401): at android.content.ContentProvider$Transport.update(ContentProvider.java:228)


08-02 11:55:43.835 E/DatabaseUtils(20401): at android.content.ContentProviderNative.onTransact(ContentProviderNative.java:222)


08-02 11:55:43.835 E/DatabaseUtils(20401): at android.os.Binder.execTransact(Binder.java:336)


08-02 11:55:43.835 E/DatabaseUtils(20401): at dalvik.system.NativeStart.run(Native Method)


08-02 11:55:43.835 W/dalvikvm(20654): threadid=17: thread exiting with uncaught exception (group=0x40018560)

问题引起原因:多个provider公用一个database造成,用的SQLiteOpenHelper创建的数据库,执行mDBHelper.getWritableDatabase()时,因为SQLiteOpenHelper里面的方法时给方法名加锁,或者是以synchronized(this)的方式,表示只对当前类实例进行锁。

我们多个provider用了多个类实例,但是database是同一个,当多个provider同时,比如两个线程中,同时操作database时,比如同时插入数据到providerA,providerB,频繁就会出现这个问题。

解决办法就是一个provider对应一个数据库。


评论
©LotusLoveNature | Powered by LOFTER