android - SQLite 返回错误代码 14

标签 android database android-sqlite

我正在尝试从我的 Assets 文件夹中复制现有数据库并对其执行一些操作。一切正常,但我的模拟器的日志文件中出现以下错误:

sqlite returned: error code = 14, msg = cannot open file at source line 25467

09-06 11:23:41.844: INFO/Database(22560): sqlite returned: error code = 14, msg = cannot open file at source line 25467
09-06 11:23:41.885: ERROR/Database(22560): sqlite3_open_v2("/data/data/com.dhani.Lazy/databases/LazyDB.sqlite", &handle, 1, NULL) failed
09-06 11:23:41.885: WARN/System.err(22560): android.database.sqlite.SQLiteException: unable to open database file
09-06 11:23:41.894: WARN/System.err(22560):     at android.database.sqlite.SQLiteDatabase.dbopen(Native Method)
09-06 11:23:41.904: WARN/System.err(22560):     at android.database.sqlite.SQLiteDatabase.<init>(SQLiteDatabase.java:1849)
09-06 11:23:41.914: WARN/System.err(22560):     at android.database.sqlite.SQLiteDatabase.openDatabase(SQLiteDatabase.java:820)
09-06 11:23:41.914: WARN/System.err(22560):     at com.dharani.LazyApple.Database.DataBaseHelper.checkDataBase(DataBaseHelper.java:72)
09-06 11:23:41.914: WARN/System.err(22560):     at com.dharani.LazyApple.Database.DataBaseHelper.createDataBase(DataBaseHelper.java:47)
09-06 11:23:41.914: WARN/System.err(22560):     at com.dharani.LazyApple.Database.DataBaseHelper.Login(DataBaseHelper.java:166)
09-06 11:23:41.914: WARN/System.err(22560):     at com.dharani.LazyApple.Views.LoginView$1.onClick(LoginView.java:63)
09-06 11:23:41.934: WARN/System.err(22560):     at android.view.View.performClick(View.java:2485)
09-06 11:23:41.934: WARN/System.err(22560):     at android.view.View$PerformClick.run(View.java:9080)
09-06 11:23:41.944: WARN/System.err(22560):     at android.os.Handler.handleCallback(Handler.java:587)
09-06 11:23:41.944: WARN/System.err(22560):     at android.os.Handler.dispatchMessage(Handler.java:92)
09-06 11:23:41.944: WARN/System.err(22560):     at android.os.Looper.loop(Looper.java:123)
09-06 11:23:41.944: WARN/System.err(22560):     at android.app.ActivityThread.main(ActivityThread.java:3683)
09-06 11:23:41.964: WARN/System.err(22560):     at java.lang.reflect.Method.invokeNative(Native Method)
09-06 11:23:41.964: WARN/System.err(22560):     at java.lang.reflect.Method.invoke(Method.java:507)
09-06 11:23:41.964: WARN/System.err(22560):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
09-06 11:23:41.964: WARN/System.err(22560):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
09-06 11:23:41.964: WARN/System.err(22560):     at dalvik.system.NativeStart.main(Native Method)

关于如何解决这个问题有什么建议吗?

最佳答案

这可能有点晚了,但希望这对遇到此问题的人有所帮助(因为我找不到明确的解决方案)。

我想我知道这个原因的原因(至少对我来说是这样)。查看 DDMS --> 文件资源管理器,您会发现 数据库文件夹 (/data/data//databases/) 确实不存在,这就是应用程序无法在该不存在的文件夹中创建数据库文件的原因。如果您可以通过某种方式创建数据库文件夹,则可以避免此问题。

因为我很懒,我只是在模拟器模式下使用 /data/data//files/文件夹。您可以使用以下方法获取文件目录:

context.getFilesDir().getPath()

这在模拟器中非常适合我。

希望这对某人有所帮助。

如果你想看一些代码:

String dbFilename = "example.db";
try
{       
    File databaseFile = getDatabasePath(dbFilename);        
        SQLiteDatabase _db = SQLiteDatabase.openOrCreateDatabase(databaseFile);
} catch (Exception e)
{
    String databasePath =  getFilesDir().getPath() +  "/" + dbFilename;
    File databaseFile = new File(databasePath); 
    _db = SQLiteDatabase.openOrCreateDatabase(databaseFile);
}

编辑:我尝试在模拟器上登录 Facebook(我的应用程序具有 FB 集成),然后/databases 文件夹出现(并持续存在)。不知道发生了什么,但有可能以某种方式创建该文件夹。让附近的另一位专家来解释一下。

关于android - SQLite 返回错误代码 14,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7316191/

相关文章:

sql - table==1 是意外的此时批处理文件

mysql - Pentaho 错误 - ConnectionServiceImpl.ERROR_0009 - 连接到数据库 [null] 失败

java - 是否可以从同一个 SQLite 数据库中检索文本和图像

android:如何在不运行模拟器的情况下操作sqlite数据库?

java - 保存 ListView 数据

java - 如何将添加添加到我们的 Android 应用程序中

java - 有什么方法可以在 Android 中为 API 14 实现 showSoftInputOnFocus?

java - OnClick 在编辑 toastview 并返回时崩溃

android - Admob 横幅广告加载失败,错误代码 : 3 No fill

mysql - 我需要为新语言准备一个新表吗?