【问题标题】:SQLITE error Unable to open fileSQLITE 错误无法打开文件
【发布时间】:2014-04-10 19:56:36
【问题描述】:

我想在数据目录中为应用程序创建一个数据库。我尝试使用

try{
        String path = "/data/data/"+context+"/database/Einkaufsliste.sqlite";
        database = SQLiteDatabase.openOrCreateDatabase(path,null);
    }

但我总是遇到以下异常: 无法打开数据库文件

Logcat 给出以下结果:

04-10 19:55:09.387: E/SqliteDatabaseCpp(554): sqlite3_open_v2("/data/data/at.einkaufsliste/database/Einkaufsliste.sqlite", &handle, 6, NULL) 失败 04-10 19:55:09.527: E/SQLiteDatabase(554): 无法打开数据库。关闭它。 04-10 19:55:09.527: E/SQLite 数据库(554): android.database.sqlite.SQLiteCantOpenDatabaseException:无法 打开数据库文件 04-10 19:55:09.527: E/SQLiteDatabase(554): at android.database.sqlite.SQLiteDatabase.dbopen(Native Method) 04-10 19:55:09.527:E/SQLiteDatabase(554):在 android.database.sqlite.SQLiteDatabase.openDatabase(SQLiteDatabase.java:1013) 04-10 19:55:09.527: E/SQLiteDatabase(554): 在 android.database.sqlite.SQLiteDatabase.openDatabase(SQLiteDatabase.java:986) 04-10 19:55:09.527: E/SQLiteDatabase(554): 在 android.database.sqlite.SQLiteDatabase.openDatabase(SQLiteDatabase.java:962) 04-10 19:55:09.527: E/SQLiteDatabase(554): 在 android.database.sqlite.SQLiteDatabase.openOrCreateDatabase(SQLiteDatabase.java:1043) 04-10 19:55:09.527: E/SQLiteDatabase(554): 在 at.einkaufsliste.Database.createOrOpen(Database.java:33) 04-10 19:55:09.527:E/SQLiteDatabase(554):在 at.einkaufsliste.Database.(Database.java:23) 04-10 19:55:09.527: E/SQLiteDatabase(554):在 at.einkaufsliste.MainActivity.onCreate(MainActivity.java:50) 04-10 19:55:09.527:E/SQLiteDatabase(554):在 android.app.Activity.performCreate(Activity.java:4465) 04-10 19:55:09.527:E/SQLiteDatabase(554):在 android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1049) 04-10 19:55:09.527: E/SQLiteDatabase(554): 在 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1920) 04-10 19:55:09.527: E/SQLiteDatabase(554): 在 android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1981) 04-10 19:55:09.527: E/SQLiteDatabase(554): 在 android.app.ActivityThread.access$600(ActivityThread.java:123) 04-10 19:55:09.527:E/SQLiteDatabase(554):在 android.app.ActivityThread$H.handleMessage(ActivityThread.java:1147) 04-10 19:55:09.527: E/SQLiteDatabase(554): 在 android.os.Handler.dispatchMessage(Handler.java:99) 04-10 19:55:09.527:E/SQLiteDatabase(554):在 android.os.Looper.loop(Looper.java:137) 04-10 19:55:09.527: E/SQLiteDatabase(554):在 android.app.ActivityThread.main(ActivityThread.java:4424) 04-10 19:55:09.527:E/SQLiteDatabase(554):在 java.lang.reflect.Method.invokeNative(Native Method) 04-10 19:55:09.527:E/SQLiteDatabase(554):在 java.lang.reflect.Method.invoke(Method.java:511) 04-10 19:55:09.527: E/SQLiteDatabase(554):在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784) 04-10 19:55:09.527: E/SQLiteDatabase(554): 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551) 04-10 19:55:09.527:E/SQLiteDatabase(554):在 dalvik.system.NativeStart.main(Native Method)

我设置权限EXTERNAL Storage和组权限。

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<permission-group android:name="android.permission-group.STORAGE"></permission-group>

这种用法有什么问题?

【问题讨论】:

    标签: android database sqlite


    【解决方案1】:

    这种用法有什么问题?

    绝不使用硬编码路径/data/data 对许多用户来说是错误的。 Use getDatabasePath() 获取数据库文件在内部存储中的位置。这也将解决您使用字符串连接构建路径的问题。

    这会给你:

    try {
        database = SQLiteDatabase.openOrCreateDatabase(getDatabasePath("Einkaufsliste.sqlite"), null);
    }
    

    假设这段代码是从Context 的子类中的方法调用的。否则,您需要安排在Context 上致电getDatabasePath()

    我设置了EXTERNAL存储权限

    如果你的意思是你有WRITE_EXTERNAL_STORAGE,这里没关系,因为你没有把数据库放在外部存储上

    和组权限

    我不知道那是什么意思,抱歉。

    另外,请考虑使用SQLiteOpenHelper,以便能够处理数据库架构随时间的变化。

    【讨论】:

    • 如果我使用database = SQLiteDatabase.openOrCreateDatabase(context.getDatabasePath("Einkaufsliste.sqlite"),null);,我仍然会得到相同的结果。
    • @IrgendwPointer:尝试完全卸载并重新安装您的应用程序,以防您内部存储的权限被弄乱了。否则,我不知道为什么这行不通。
    猜你喜欢
    • 2021-10-15
    • 1970-01-01
    • 2020-06-10
    • 2020-07-03
    • 1970-01-01
    • 2011-05-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-14
    相关资源
    最近更新 更多