比较来自世界各地的卖家的域名和 IT 服务价格

随机例外 android.database.sqlite.SQLiteException: 无法打开数据库文件

我的应用程序使用的是非干扰例外的处理程序,它将堆栈发送给我 trace, 应用程序失败时。 我经常从随机用户收到此报告。

我无法重现它,数据库开放在我的情况下总是成功的。 这不是存储在外部地图上的数据库。 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.access$2200/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/


</init>
已邀请:

郭文康

赞同来自:

更新我的固件后,我的错误 android. 数据库由旧固件创建,因此无法使用新的固件打开。
用户可以解决此错误,删除并重新安装应用程序。

诸葛浮云

赞同来自:

可能发生的可能性之一 - 这是当您从多个线程访问数据库文件时,当您尝试打开它从另一个流更改时,文件锁定文件时。

董宝中

赞同来自:

如果您的应用程序同时打开来自多个流的数据库,可能会导致此异常。

请试试 synchronized method to open database.synchronized 该方法不会允许数据库同时从多个流打开。
将下面的代码放在下面 dbHelper


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


并在获取数据库时调用此方法。
我希望它会有所帮助。

董宝中

赞同来自:

对于任何数据库应用程序,我首先创建一个数据库 sqlite 在橡皮顿的帮助下 Sqlite Manager Firefox 把她带到文件夹 /res/raw. 然后在我的代码中,我检查是否有数据库 /data/data 对于这个申请。 如果没有,我用我的代码复制此目录中的数据库文件。

您的情况很难确定确切的原因,而无需看到您创建数据库以及如何使用它。 获得此异常的问题可能是由几个原因引起的。 他人已经提到了一些问题。 我想提一下一件事。 你能试着像这样打开数据库吗?


SQLiteDatabase.openDatabase/myPath, null, SQLiteDatabase.NO_LOCALIZED_COLLATORS/;


可能,如果您展示了代码片段,我可以尝试更好地帮助。 好吧,这里描述了我的方法,您可以看出它是否有帮助。

https://coderoad.ru/19263028/
数据 SQLite

二哥

赞同来自:

@yuku

我遇到了这样的问题,我以这种方式决定了这个问题。

我们需要检查旧巧合

根据

数据S.

新基地

数据 , 如果当时在新数据库中发生了变化,我们需要删除

旧基地

数据和安装

新基地

数据 OR 按照新数据库更改表

第二个选项很简单

消除

老的

应用程序并安装新


希望它会为你工作.. !!!

裸奔

赞同来自:

我遇到了这个问题。

我的一个应用程序以相同的方式表现,因为我添加了代码以将数据库从资产复制到屏幕保护程序上的指定位置。 /当应用程序启动时可见的屏幕,并在几秒钟后自动关闭。/.

并且在某些情况下发生了什么,此数据库未在指定的时间段内复制,并从应用程序访问它导致异常。

我做了什么,

我只写了一个代码,用于在后台流中复制数据库,并显示用户屏幕保护程序,直到数据库被复制,只有在我显示以下屏幕之后。

如果应用程序安装在以前的版本上,则可能存在另一个解决方案,写下代码将保存的数据从以前版本的应用程序复制到新的 vesrion, 如果需要数据,并且新版本包含其他型号比以前的版本。

董宝中

赞同来自:

重新安装应用程序

并尝试使用同步块

数据库操作 CURD :/

要回复问题请先登录注册