简体   繁体   English

SQLITE错误无法打开文件

[英]SQLITE error Unable to open file

I want to create a database for an app in the data directory. 我想在数据目录中为应用创建数据库。 I tried to use 我尝试使用

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

But I get always the following exception: unable to open database file 但是我总是收到以下异常:无法打开数据库文件

Logcat gives the following result: Logcat给出以下结果:

04-10 19:55:09.387: E/SqliteDatabaseCpp(554): sqlite3_open_v2("/data/data/at.einkaufsliste/database/Einkaufsliste.sqlite", &handle, 6, NULL) failed 04-10 19:55:09.527: E/SQLiteDatabase(554): Failed to open the database. 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):无法打开数据库。 closing it. 关闭它。 04-10 19:55:09.527: E/SQLiteDatabase(554): android.database.sqlite.SQLiteCantOpenDatabaseException: unable to open database file 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): at android.database.sqlite.SQLiteDatabase.openDatabase(SQLiteDatabase.java:1013) 04-10 19:55:09.527: E/SQLiteDatabase(554): at android.database.sqlite.SQLiteDatabase.openDatabase(SQLiteDatabase.java:986) 04-10 19:55:09.527: E/SQLiteDatabase(554): at android.database.sqlite.SQLiteDatabase.openDatabase(SQLiteDatabase.java:962) 04-10 19:55:09.527: E/SQLiteDatabase(554): at android.database.sqlite.SQLiteDatabase.openOrCreateDatabase(SQLiteDatabase.java:1043) 04-10 19:55:09.527: E/SQLiteDatabase(554): at at.einkaufsliste.Database.createOrOpen(Database.java:33) 04-10 19:55:09.527: E/SQLiteDatabase(554): at at.einkaufsliste.Database.(Database.java:23) 04-10 19:55:09.527: E/SQLiteDatabase(554): at at.einkaufsliste.MainA 04-10 19:55:09.527:E / SQLiteDatabase(554):android.database.sqlite.SQLiteCantOpenDatabaseException:无法打开数据库文件04-10 19:55:09.527:E / SQLiteDatabase(554):位于android.database。 sqlite.SQLiteDatabase.dbopen(本机方法)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.MainA ctivity.onCreate(MainActivity.java:50) 04-10 19:55:09.527: E/SQLiteDatabase(554): at android.app.Activity.performCreate(Activity.java:4465) 04-10 19:55:09.527: E/SQLiteDatabase(554): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1049) 04-10 19:55:09.527: E/SQLiteDatabase(554): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1920) 04-10 19:55:09.527: E/SQLiteDatabase(554): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1981) 04-10 19:55:09.527: E/SQLiteDatabase(554): at android.app.ActivityThread.access$600(ActivityThread.java:123) 04-10 19:55:09.527: E/SQLiteDatabase(554): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1147) 04-10 19:55:09.527: E/SQLiteDatabase(554): at android.os.Handler.dispatchMessage(Handler.java:99) 04-10 19:55:09.527: E/SQLiteDatabase(554): at android.os.Looper.loop(Looper.java:137) 04-10 19:55:09.527: E/SQLiteDatabase(554): at android.app.ActivityThread.main(ActivityThr ctivity.onCreate(MainActivity.java:50)04-10 19:55:09.527:E / SQLiteDatabase(554):at 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(ActivityThr ead.java:4424) 04-10 19:55:09.527: E/SQLiteDatabase(554): at java.lang.reflect.Method.invokeNative(Native Method) 04-10 19:55:09.527: E/SQLiteDatabase(554): at java.lang.reflect.Method.invoke(Method.java:511) 04-10 19:55:09.527: E/SQLiteDatabase(554): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784) 04-10 19:55:09.527: E/SQLiteDatabase(554): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551) 04-10 19:55:09.527: E/SQLiteDatabase(554): at dalvik.system.NativeStart.main(Native Method) ead.java:4424)04-10 19:55:09.527:E / SQLiteDatabase(554):at java.lang.reflect.Method.invokeNative(Native Method)04-10 19:55:09.527:E / SQLiteDatabase(554 ):at java.lang.reflect.Method.invoke(Method.java:511)04-10 19:55:09.527:E / SQLiteDatabase(554):at 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(本机方法)

I set the permission EXTERNAL Storage and the group permisson. 我设置了权限EXTERNAL Storage和组权限。

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

What is wrong with this usage? 这种用法有什么问题?

What is wrong with this usage? 这种用法有什么问题?

NEVER HARDCODE PATHS . 绝不困难的路径 /data/data is wrong for many users. /data/data对许多用户来说是错误的。 Use getDatabasePath() to get the location where a database file should go on internal storage. 使用getDatabasePath()获取数据库文件应在内部存储器上放置的位置。 This will also fix your problems with using string concatenation to build a path. 这也可以解决使用字符串连接构建路径的问题。

That would give you: 那会给你:

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

assuming that this code is called from a method in a subclass of Context . 假定此代码是从Context的子类中的方法调用的。 Otherwise, you will need to arrange to call getDatabasePath() on a Context . 否则,您将需要安排在Context上调用getDatabasePath()

I set the permission EXTERNAL Storage 我设置了权限EXTERNAL Storage

If by this you mean that you have WRITE_EXTERNAL_STORAGE , that does not matter here, as you are not putting the database on external storage 如果您的意思是说您拥有WRITE_EXTERNAL_STORAGE ,则在这里没关系,因为您没有将数据库放在外部存储上

and the group permisson 和团体许可证

I have no idea what that means, sorry. 我不知道那意味着什么,对不起。

Also, please consider using SQLiteOpenHelper , to be able to handle database schema changes over time. 另外,请考虑使用SQLiteOpenHelper ,以便能够随时间处理数据库架构更改。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 SQLite和Android:无法打开数据库文件 - 错误14 - SQLite & Android: unable to open database file - error 14 无法打开数据库Sqlite文件 - unable to open database Sqlite file 无法打开sqlite数据库文件 - Unable to open sqlite database file Sqlite错误:无法打开数据库“/data/data/PackageName/databases/SampleDB.db”:无法打开数据库文件 - Sqlite error: unable to open database “/data/data/PackageName/databases/SampleDB.db”: unable to open database file Android Sqlite 错误 android.database.sqlite.SQLiteCantOpenDatabaseException:无法打开数据库文件 - Android Sqlite Error android.database.sqlite.SQLiteCantOpenDatabaseException: unable to open database file SQLite 安卓 . 无法打开数据库文件 - SQLite Android . unable to open database file Unity SQLite连接无法打开数据库文件 - Unity SQLite conection unable to open database file sqlite数据库错误无法打开活动 - sqlite database error unable to open activity Android数据库错误(android.database.sqlite.SQLiteCantOpenDatabaseException:无法打开数据库文件) - Android database error (android.database.sqlite.SQLiteCantOpenDatabaseException: unable to open database file) 从不同的包访问数据库:它给出错误:android.database.sqlite.SQLiteException:无法打开数据库文件 - Accessing database from different package : It give error : android.database.sqlite.SQLiteException: unable to open database file
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM