gpt4 book ai didi

android - SQLiteCantOpenDatabaseException : unknown error (code 14) Could not open database

转载 作者:太空宇宙 更新时间:2023-11-03 11:36:52 29 4
gpt4 key购买 nike

当我尝试获取可读或可写的数据库时出现此错误。“SQLiteCantOpenDatabaseException:未知错误(代码 14)无法打开数据库”我在使用 SQLiteOpenHelper 时遇到了这个奇怪的问题,我在这里看到了一些关于同一问题的类似答案,但没有一个解决了我的问题。和我一样绝望,我在下面发布我的代码,希望有人能找到我没有看到的东西......

(一个重要的信息:我从另一个工作的应用程序中得到这个应用程序。但是我第一次调试它时,我仍然没有更改 dbname。这是以前的应用程序的名称(ks.db)。该数据库存在于我的调试设备中,但 tr.db 不存在)

我的 DatabaseHelper 类是这样的:

//Singleton
private static DatabaseHelper sInstance;

//Log
private static String TAG = "Database";

private static final String NAME_DB = "tr.db";
private static final String PATH_DB_DEBUG = "/mnt/sdcard/";
private static final int VERSION = 4;

//TABLE NAMES
private static final String TABLE_USERS = "users";
private static final String TABLE_TRACKS = "tracks";
private static final String TABLE_ROTAS = "rotas";
...
/**
*
* @param context
* @return Unique instance of DataBaseHelper
*/
public static synchronized DatabaseHelper getInstance(Context context) {
if (sInstance == null) {
sInstance = new DatabaseHelper(context.getApplicationContext());
}
return sInstance;
}

我的安卓 list :

...

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

在主要 Activity 中:

    //DB
DatabaseHelper database;
...
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
...
//database
database = DatabaseHelper.getInstance(this.getApplicationContext());
database.getReadableDatabase(); ( <- Error HERE)

这是完整的错误堆栈:

> 12-13 15:02:43.798    5764-5764/com.snitram.toriders E/SQLiteLog﹕ (14)
> cannot open file at line 31307 of [2ef4f3a5b1] 12-13 15:02:43.798
> 5764-5764/com.snitram.toriders E/SQLiteLog﹕ (14) os_unix.c:31307: (2)
> open(/storage/emulated/0tr.db) - 12-13 15:02:43.811
> 5764-5764/com.snitram.toriders E/SQLiteDatabase﹕ Failed to open
> database '/storage/emulated/0tr.db'.
> android.database.sqlite.SQLiteCantOpenDatabaseException: unknown error (code 14): Could not open database
> at android.database.sqlite.SQLiteConnection.nativeOpen(Native Method)
> at android.database.sqlite.SQLiteConnection.open(SQLiteConnection.java:207)
> at android.database.sqlite.SQLiteConnection.open(SQLiteConnection.java:191)
> at android.database.sqlite.SQLiteConnectionPool.openConnectionLocked(SQLiteConnectionPool.java:463)
> at android.database.sqlite.SQLiteConnectionPool.open(SQLiteConnectionPool.java:185)
> at android.database.sqlite.SQLiteConnectionPool.open(SQLiteConnectionPool.java:177)
> at android.database.sqlite.SQLiteDatabase.openInner(SQLiteDatabase.java:806)
> at android.database.sqlite.SQLiteDatabase.open(SQLiteDatabase.java:791)
> at android.database.sqlite.SQLiteDatabase.openDatabase(SQLiteDatabase.java:694)
> at android.app.ContextImpl.openOrCreateDatabase(ContextImpl.java:571)
> at android.content.ContextWrapper.openOrCreateDatabase(ContextWrapper.java:269)
> at android.database.sqlite.SQLiteOpenHelper.getDatabaseLocked(SQLiteOpenHelper.java:223)
> at android.database.sqlite.SQLiteOpenHelper.getReadableDatabase(SQLiteOpenHelper.java:187)
> at com.snitram.toriders.activities.LoginActivity.onCreate(LoginActivity.java:222)
> at android.app.Activity.performCreate(Activity.java:6245)
> at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1130)
> at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2379)
> at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2490)
> at android.app.ActivityThread.-wrap11(ActivityThread.java)
> at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1354)
> at android.os.Handler.dispatchMessage(Handler.java:102)
> at android.os.Looper.loop(Looper.java:148)
> at android.app.ActivityThread.main(ActivityThread.java:5443)
> at java.lang.reflect.Method.invoke(Native Method)
> at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:728)
> at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618) 12-13
> 15:02:43.814 5764-5764/com.snitram.toriders E/SQLiteOpenHelper﹕
> Couldn't open /storage/emulated/0tr.db for writing (will try
> read-only):
> android.database.sqlite.SQLiteCantOpenDatabaseException: unknown error (code 14): Could not open database
> at android.database.sqlite.SQLiteConnection.nativeOpen(Native Method)
> at android.database.sqlite.SQLiteConnection.open(SQLiteConnection.java:207)
> at android.database.sqlite.SQLiteConnection.open(SQLiteConnection.java:191)
> at android.database.sqlite.SQLiteConnectionPool.openConnectionLocked(SQLiteConnectionPool.java:463)
> at android.database.sqlite.SQLiteConnectionPool.open(SQLiteConnectionPool.java:185)
> at android.database.sqlite.SQLiteConnectionPool.open(SQLiteConnectionPool.java:177)
> at android.database.sqlite.SQLiteDatabase.openInner(SQLiteDatabase.java:806)
> at android.database.sqlite.SQLiteDatabase.open(SQLiteDatabase.java:791)
> at android.database.sqlite.SQLiteDatabase.openDatabase(SQLiteDatabase.java:694)
> at android.app.ContextImpl.openOrCreateDatabase(ContextImpl.java:571)
> at android.content.ContextWrapper.openOrCreateDatabase(ContextWrapper.java:269)
> at android.database.sqlite.SQLiteOpenHelper.getDatabaseLocked(SQLiteOpenHelper.java:223)
> at android.database.sqlite.SQLiteOpenHelper.getReadableDatabase(SQLiteOpenHelper.java:187)
> at com.snitram.toriders.activities.LoginActivity.onCreate(LoginActivity.java:222)
> at android.app.Activity.performCreate(Activity.java:6245)
> at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1130)
> at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2379)
> at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2490)
> at android.app.ActivityThread.-wrap11(ActivityThread.java)
> at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1354)
> at android.os.Handler.dispatchMessage(Handler.java:102)
> at android.os.Looper.loop(Looper.java:148)
> at android.app.ActivityThread.main(ActivityThread.java:5443)
> at java.lang.reflect.Method.invoke(Native Method)
> at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:728)
> at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618) 12-13
> 15:02:43.815 5764-5764/com.snitram.toriders E/SQLiteLog﹕ (14)
> cannot open file at line 31307 of [2ef4f3a5b1] 12-13 15:02:43.815
> 5764-5764/com.snitram.toriders E/SQLiteLog﹕ (14) os_unix.c:31307: (2)
> open(/storage/emulated/0tr.db) - 12-13 15:02:43.816
> 5764-5764/com.snitram.toriders E/SQLiteDatabase﹕ Failed to open
> database '/storage/emulated/0tr.db'.
> android.database.sqlite.SQLiteCantOpenDatabaseException: unknown error (code 14): Could not open database
> at android.database.sqlite.SQLiteConnection.nativeOpen(Native Method)
> at android.database.sqlite.SQLiteConnection.open(SQLiteConnection.java:207)
> at android.database.sqlite.SQLiteConnection.open(SQLiteConnection.java:191)
> at android.database.sqlite.SQLiteConnectionPool.openConnectionLocked(SQLiteConnectionPool.java:463)
> at android.database.sqlite.SQLiteConnectionPool.open(SQLiteConnectionPool.java:185)
> at android.database.sqlite.SQLiteConnectionPool.open(SQLiteConnectionPool.java:177)
> at android.database.sqlite.SQLiteDatabase.openInner(SQLiteDatabase.java:806)
> at android.database.sqlite.SQLiteDatabase.open(SQLiteDatabase.java:791)
> at android.database.sqlite.SQLiteDatabase.openDatabase(SQLiteDatabase.java:694)
> at android.database.sqlite.SQLiteOpenHelper.getDatabaseLocked(SQLiteOpenHelper.java:234)
> at android.database.sqlite.SQLiteOpenHelper.getReadableDatabase(SQLiteOpenHelper.java:187)
> at com.snitram.toriders.activities.LoginActivity.onCreate(LoginActivity.java:222)
> at android.app.Activity.performCreate(Activity.java:6245)
> at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1130)
> at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2379)
> at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2490)
> at android.app.ActivityThread.-wrap11(ActivityThread.java)
> at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1354)
> at android.os.Handler.dispatchMessage(Handler.java:102)
> at android.os.Looper.loop(Looper.java:148)
> at android.app.ActivityThread.main(ActivityThread.java:5443)
> at java.lang.reflect.Method.invoke(Native Method)
> at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:728)
> at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618) 12-13
> 15:02:43.816 5764-5764/com.snitram.toriders D/AndroidRuntime﹕
> Shutting down VM 12-13 15:02:43.817 5764-5764/com.snitram.toriders
> E/AndroidRuntime﹕ FATAL EXCEPTION: main
> Process: com.snitram.toriders, PID: 5764
> java.lang.RuntimeException: Unable to start activity ComponentInfo{com.snitram.toriders/com.snitram.toriders.activities.LoginActivity}:
> android.database.sqlite.SQLiteCantOpenDatabaseException: unknown error
> (code 14): Could not open database
> at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2426)
> at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2490)
> at android.app.ActivityThread.-wrap11(ActivityThread.java)
> at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1354)
> at android.os.Handler.dispatchMessage(Handler.java:102)
> at android.os.Looper.loop(Looper.java:148)
> at android.app.ActivityThread.main(ActivityThread.java:5443)
> at java.lang.reflect.Method.invoke(Native Method)
> at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:728)
> at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)
> Caused by: android.database.sqlite.SQLiteCantOpenDatabaseException: unknown error
> (code 14): Could not open database
> at android.database.sqlite.SQLiteConnection.nativeOpen(Native Method)
> at android.database.sqlite.SQLiteConnection.open(SQLiteConnection.java:207)
> at android.database.sqlite.SQLiteConnection.open(SQLiteConnection.java:191)
> at android.database.sqlite.SQLiteConnectionPool.openConnectionLocked(SQLiteConnectionPool.java:463)
> at android.database.sqlite.SQLiteConnectionPool.open(SQLiteConnectionPool.java:185)
> at android.database.sqlite.SQLiteConnectionPool.open(SQLiteConnectionPool.java:177)
> at android.database.sqlite.SQLiteDatabase.openInner(SQLiteDatabase.java:806)
> at android.database.sqlite.SQLiteDatabase.open(SQLiteDatabase.java:791)
> at android.database.sqlite.SQLiteDatabase.openDatabase(SQLiteDatabase.java:694)
> at android.database.sqlite.SQLiteOpenHelper.getDatabaseLocked(SQLiteOpenHelper.java:234)
> at android.database.sqlite.SQLiteOpenHelper.getReadableDatabase(SQLiteOpenHelper.java:187)
> at com.snitram.toriders.activities.LoginActivity.onCreate(LoginActivity.java:222)
> at android.app.Activity.performCreate(Activity.java:6245)
> at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1130)
> at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2379)
>             at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2490)
>             at android.app.ActivityThread.-wrap11(ActivityThread.java)
>             at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1354)
>             at android.os.Handler.dispatchMessage(Handler.java:102)
>             at android.os.Looper.loop(Looper.java:148)
>             at android.app.ActivityThread.main(ActivityThread.java:5443)
>             at java.lang.reflect.Method.invoke(Native Method)
>             at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:728)
>             at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)

最佳答案

您在可能不存在的文件路径上使用 SQLiteDatabase.openDatabase。在 SQLiteDatabase.openDatabase 调用之前添加以下 2 行

   private boolean checkDataBase() {
SQLiteDatabase checkDB = null;
try {

String myPath = DB_PATH + DB_NAME;

File file = new File(myPath);
if (file.exists() && !file.isDirectory())
checkDB = SQLiteDatabase.openDatabase(myPath, null, SQLiteDatabase.OPEN_READWRITE);
} catch (SQLiteException e) {
// database does't exist yet.
}

if (checkDB != null) {
checkDB.close();
}

return checkDB != null ? true : false;
}

关于android - SQLiteCantOpenDatabaseException : unknown error (code 14) Could not open database,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34253785/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com