Android的数据库锁定 [英] Android Database Locked

查看:127
本文介绍了Android的数据库锁定的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我收到以下错误。那么,如何解开我的数据库?

  8月10号至28号:43:26.510:ERROR / AndroidRuntime(881):致命异常:螺纹11
八月10日至28日:43:26.510:ERROR / AndroidRuntime(881):android.database.sqlite.SQLiteDatabaseLockedException:数据库已锁定
八月10日至28日:43:26.510:ERROR / AndroidRuntime(881):在android.database.sqlite.SQLiteDatabase.dbopen(本机方法)
八月10日至28日:43:26.510:ERROR / AndroidRuntime(881):在android.database.sqlite.SQLiteDatabase.openDatabase(SQLiteDatabase.java:983)
八月10日至28日:43:26.510:ERROR / AndroidRuntime(881):在android.database.sqlite.SQLiteDatabase.openDatabase(SQLiteDatabase.java:956)
八月10日至28日:43:26.510:ERROR / AndroidRuntime(881):在android.database.sqlite.SQLiteDatabase.openOrCreateDatabase(SQLiteDatabase.java:1021)
八月10日至28日:43:26.510:ERROR / AndroidRuntime(881):在android.app.ContextImpl.openOrCreateDatabase(ContextImpl.java:742)
八月10日至28日:43:26.510:ERROR / AndroidRuntime(881):在android.content.ContextWrapper.openOrCreateDatabase(ContextWrapper.java:221)
八月10日至28日:43:26.510:ERROR / AndroidRuntime(881):在android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:149)
八月10日至28日:43:26.510:ERROR / AndroidRuntime(881):在com.aa.me.vianet.dbAdapter.DbAdapter.open(DbAdapter.java:25)
八月10日至28日:43:26.510:ERROR / AndroidRuntime(881):在com.aa.me.vianet.services.NotificationManagerThread.run(NotificationManagerThread.java:49)
 

解决方案

我想你已经忘记关闭数据库,或者另一个线程写入数据库,当你试图写它。 SQLLite锁定当它被写入,以避免损坏,如果另一个实体试图写入同一个数据库,同时数据库。 Android的,将只显示在日志中的猫一个错误,你所提供的查询将被刚刚忘记......

所以,我建议:

  • 您只能从一个SQLOpenHelper
  • 访问数据库
  • 您一定要关闭数据库助手的所有实例,一旦你已经完成了他们的
  • 您确保您永远结束与endTransaction(交易),如果你还没有设置它们全成(即,如果您希望还原他们回来),如果你使用事务
  • 您可以尝试使用 OrmLite ,我没有用它,但我在这里狂欢一下吧听过别人。

I am getting following error. So how do I unlock my database?

10-28 08:43:26.510: ERROR/AndroidRuntime(881): FATAL EXCEPTION: Thread-11
10-28 08:43:26.510: ERROR/AndroidRuntime(881): android.database.sqlite.SQLiteDatabaseLockedException: database is locked
10-28 08:43:26.510: ERROR/AndroidRuntime(881):     at android.database.sqlite.SQLiteDatabase.dbopen(Native Method)
10-28 08:43:26.510: ERROR/AndroidRuntime(881):     at android.database.sqlite.SQLiteDatabase.openDatabase(SQLiteDatabase.java:983)
10-28 08:43:26.510: ERROR/AndroidRuntime(881):     at android.database.sqlite.SQLiteDatabase.openDatabase(SQLiteDatabase.java:956)
10-28 08:43:26.510: ERROR/AndroidRuntime(881):     at android.database.sqlite.SQLiteDatabase.openOrCreateDatabase(SQLiteDatabase.java:1021)
10-28 08:43:26.510: ERROR/AndroidRuntime(881):     at android.app.ContextImpl.openOrCreateDatabase(ContextImpl.java:742)
10-28 08:43:26.510: ERROR/AndroidRuntime(881):     at android.content.ContextWrapper.openOrCreateDatabase(ContextWrapper.java:221)
10-28 08:43:26.510: ERROR/AndroidRuntime(881):     at android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:149)
10-28 08:43:26.510: ERROR/AndroidRuntime(881):     at com.aa.me.vianet.dbAdapter.DbAdapter.open(DbAdapter.java:25)
10-28 08:43:26.510: ERROR/AndroidRuntime(881):     at com.aa.me.vianet.services.NotificationManagerThread.run(NotificationManagerThread.java:49)

解决方案

I think you have forgotten to close the database, or another thread is writing to the database when you are trying to write to it. SQLLite locks the database when it is writing to it to avoid corruption if another entity tries to write to the same database at the same time. Android, will only show a error in log cat, and the query you supplied will be just forgotten...

So, I recommend:

  • You only access the database from one SQLOpenHelper
  • You make sure you close all instances of database helpers once you have finished with them
  • You make sure you always end transactions with endTransaction() also if you do not set them successfull (i.e. if you want to roll 'em back), in case you use transactions
  • You could try using OrmLite, I've not used it, but I've heard others here rave about it.

这篇关于Android的数据库锁定的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆