当你想在你的代码中找到一个错误时,这很难;当你认为你的代码是不会有错误时,这就更难了。

随机异常android.database.sqlite.sqlite exception:无法打开数据库文件

admin 72℃
我的应用程序使用一个未捕获的异常处理程序,在应用程序崩溃时将堆栈跟踪发送给我。我经常从随机用户那里得到这份报告。

我不能复制它,在我的情况下,打开数据库总是成功的。这不是存储在外部SD卡上的数据库,而是用 SQLiteOpenHelper(context, "SomeName", null, someVersionCode) .

你有这方面的经验吗?在打开数据库之前,我可以检查哪些可能性?

谢谢你!

android.database.sqlite.SQLiteException: unable to open database file
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2496)
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2512)
    at android.app.ActivityThread.access00(ActivityThread.java:119)
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1863)
    at android.os.Handler.dispatchMessage(Handler.java:99)
    at android.os.Looper.loop(Looper.java:123)
    at android.app.ActivityThread.main(ActivityThread.java:4363)
    at java.lang.reflect.Method.invokeNative(Native Method)
    at java.lang.reflect.Method.invoke(Method.java:521)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)
    at dalvik.system.NativeStart.main(Native Method)
Caused by: android.database.sqlite.SQLiteException: unable to open database file
    at android.database.sqlite.SQLiteDatabase.dbopen(Native Method)
    at android.database.sqlite.SQLiteDatabase.<init>(SQLiteDatabase.java:1698)
    at android.database.sqlite.SQLiteDatabase.openDatabase(SQLiteDatabase.java:739)
    at android.database.sqlite.SQLiteDatabase.openOrCreateDatabase(SQLiteDatabase.java:761)
    at android.database.sqlite.SQLiteDatabase.openOrCreateDatabase(SQLiteDatabase.java:754)
    at android.app.ApplicationContext.openOrCreateDatabase(ApplicationContext.java:476)
    at android.content.ContextWrapper.openOrCreateDatabase(ContextWrapper.java:193)
    at android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:98)

在升级我的android固件之后,我也遇到了同样的错误。数据库是由旧固件创建的,因此无法由新固件打开。 用户可以通过卸载并重新安装应用程序来解决此错误。

可能发生这种情况的一种可能情况是,当您从多个线程访问数据库文件时,当您试图从另一个线程打开数据库文件进行修改时,文件被其中一个线程锁定。

如果应用程序同时从多个线程打开数据库,则可能是此异常的原因。

请尝试synchronized方法打开数据库。synchronized方法不允许同时从多个线程打开数据库。 在dbhelper中输入下面的代码

private synchronized SQLiteDatabase getWritableDB() {
        //get your database and return it from this method.
}

在得到数据库时调用这些方法。 希望能有所帮助。

@尤库

我面临的这类问题,就是这样解决的。

  1. 我们需要检查旧数据库是否与新数据库相同,如果有更改,我们需要删除旧数据库并安装新数据库,或者根据新数据库更改表

  2. 第二个选项很简单,只需卸载旧应用程序,然后安装新应用程序即可

希望这对你有用。!!

转载请注明:我的代码 » 随机异常android.database.sqlite.sqlite exception:无法打开数据库文件