2016-03-21 1 views
-1

私はAndroidアプリケーションでデータベース接続に問題があります。奇妙なことは、すべてがうまくいっていることです。ある朝、この問題が発生し始めた。既存のよく稼動しているアプリケーションも同様です。Android Issu with SQLiteCantOpenDatabaseException

私はそれが環境問題の一種だと信じていますが、それを追跡できません。あなたの助けが必要です。私はSOFの既存の投稿をチェックしました。すべての示唆、何も助けてみました。

私のDB接続プログラム:

package com.intw.jokes; 

    import java.util.ArrayList; 
    import java.util.List; 
    import android.content.Context; 
    import android.database.Cursor; 
    import android.database.sqlite.SQLiteDatabase; 
    import android.database.sqlite.SQLiteException; 
    import android.database.sqlite.SQLiteOpenHelper; 
    import android.util.Log; 

    public class DatabaseUtil extends SQLiteOpenHelper{ 

public SQLiteDatabase DB; 
public String DBPath; 
public static String DBName = "JOKES"; 
public static final int version = '1'; 
public static Context currentContext;; 


public DatabaseUtil(Context context) { 
    super(context, DBName, null, version); 
    currentContext = context; 
    DBPath = "/data/data/" + context.getPackageName() + "/databases/"; 

} 

public SQLiteDatabase getDatabaseObject(){ 
    return this.getWritableDatabase(); 
} 

public void closeDBConnection(SQLiteDatabase DB){ 
    if(null != DB) 
     DB.close(); 
} 


@Override 
public void onCreate(SQLiteDatabase db) { 

} 

@Override 
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 

} 

public void createDatabase() { 
    boolean dbExists = checkDbExists(); 
    //dbExists = false; 
    if (dbExists) { 
     // do nothing 
    } else { 
     DB = currentContext.openOrCreateDatabase(DBName, 0, null); 

     DB.close(); 
    } 
} 




private boolean checkDbExists() { 
    SQLiteDatabase checkDB = null; 
    try { 
     String myPath = DBPath + DBName; 
     checkDB = SQLiteDatabase.openDatabase(myPath, null, 
       SQLiteDatabase.OPEN_READWRITE); 
    } catch (SQLiteException e) { 

    } 
    boolean test = checkDB != null ? true : false; 
    if (checkDB != null) { 
     checkDB.close(); 
    } 
    return test; 
} 

}

と私のログ:

03-21 10:13:56.844: E/Trace(780): error opening trace file: No such file or directory (2) 
    03-21 10:13:59.794: E/SQLiteLog(780): (14) cannot open file at line 30174 of [00bb9c9ce4] 
    03-21 10:13:59.794: E/SQLiteLog(780): (14) os_unix.c:30174: (2) open(/data/data/com.intw.jokes/databases/JOKES) - 
    03-21 10:13:59.834: E/SQLiteDatabase(780): Failed to open database '/data/data/com.intw.jokes/databases/JOKES'. 
    03-21 10:13:59.834: E/SQLiteDatabase(780): android.database.sqlite.SQLiteCantOpenDatabaseException: unknown error (code 14): Could not open database 
    03-21 10:13:59.834: E/SQLiteDatabase(780): at android.database.sqlite.SQLiteConnection.nativeOpen(Native Method) 
    03-21 10:13:59.834: E/SQLiteDatabase(780): at android.database.sqlite.SQLiteConnection.open(SQLiteConnection.java:209) 
    03-21 10:13:59.834: E/SQLiteDatabase(780): at android.database.sqlite.SQLiteConnection.open(SQLiteConnection.java:193) 
    03-21 10:13:59.834: E/SQLiteDatabase(780): at android.database.sqlite.SQLiteConnectionPool.openConnectionLocked(SQLiteConnectionPool.java:463) 
    03-21 10:13:59.834: E/SQLiteDatabase(780): at android.database.sqlite.SQLiteConnectionPool.open(SQLiteConnectionPool.java:185) 
    03-21 10:13:59.834: E/SQLiteDatabase(780): at android.database.sqlite.SQLiteConnectionPool.open(SQLiteConnectionPool.java:177) 
    03-21 10:13:59.834: E/SQLiteDatabase(780): at android.database.sqlite.SQLiteDatabase.openInner(SQLiteDatabase.java:804) 
    03-21 10:13:59.834: E/SQLiteDatabase(780): at android.database.sqlite.SQLiteDatabase.open(SQLiteDatabase.java:789) 
    03-21 10:13:59.834: E/SQLiteDatabase(780): at android.database.sqlite.SQLiteDatabase.openDatabase(SQLiteDatabase.java:694) 
    03-21 10:13:59.834: E/SQLiteDatabase(780): at android.database.sqlite.SQLiteDatabase.openDatabase(SQLiteDatabase.java:669) 
    03-21 10:13:59.834: E/SQLiteDatabase(780): at com.intw.jokes.DatabaseUtil.checkDbExists(DatabaseUtil.java:111) 
    03-21 10:13:59.834: E/SQLiteDatabase(780): at com.intw.jokes.DatabaseUtil.createDatabase(DatabaseUtil.java:49) 
    03-21 10:13:59.834: E/SQLiteDatabase(780): at com.intw.jokes.AllJokesActivity.configureDatabase(AllJokesActivity.java:201) 
    03-21 10:13:59.834: E/SQLiteDatabase(780): at com.intw.jokes.AllJokesActivity.onCreate(AllJokesActivity.java:80) 
    03-21 10:13:59.834: E/SQLiteDatabase(780): at android.app.Activity.performCreate(Activity.java:5008) 
    03-21 10:13:59.834: E/SQLiteDatabase(780): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1079) 
    03-21 10:13:59.834: E/SQLiteDatabase(780): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2023) 
    03-21 10:13:59.834: E/SQLiteDatabase(780): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2084) 
    03-21 10:13:59.834: E/SQLiteDatabase(780): at android.app.ActivityThread.access$600(ActivityThread.java:130) 
    03-21 10:13:59.834: E/SQLiteDatabase(780): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1195) 
    03-21 10:13:59.834: E/SQLiteDatabase(780): at android.os.Handler.dispatchMessage(Handler.java:99) 
    03-21 10:13:59.834: E/SQLiteDatabase(780): at android.os.Looper.loop(Looper.java:137) 
    03-21 10:13:59.834: E/SQLiteDatabase(780): at android.app.ActivityThread.main(ActivityThread.java:4745) 
    03-21 10:13:59.834: E/SQLiteDatabase(780): at java.lang.reflect.Method.invokeNative(Native Method) 
    03-21 10:13:59.834: E/SQLiteDatabase(780): at java.lang.reflect.Method.invoke(Method.java:511) 
    03-21 10:13:59.834: E/SQLiteDatabase(780): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786) 
    03-21 10:13:59.834: E/SQLiteDatabase(780): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553) 
    03-21 10:13:59.834: E/SQLiteDatabase(780): at dalvik.system.NativeStart.main(Native Method) 
    03-21 10:14:00.534: D/dalvikvm(780): GC_CONCURRENT freed 304K, 9% free 7416K/8135K, paused 16ms+27ms, total 130ms 
    03-21 10:14:00.534: D/dalvikvm(780): WAIT_FOR_CONCURRENT_GC blocked 11ms 
    03-21 10:14:01.894: D/gralloc_goldfish(780): Emulator without GPU emulation detected. 
+0

は、なぜあなたは 'onCreate' /' onUpdate'を実装せず、 'SQLiteOpenHelper'を使用していますか? –

答えて

1

存在する場合は、データベースをチェックすることができ、別の方法があります。 Andre Rochaによって答えとして、checkDbExists()の内側にここのようなあなたは、現在、今されているように複雑にする必要はありませが、データベースを確認していない、

private boolean checkDbExists() {  
    File file= currentContext.getDatabasePath(DBName); 
    return file.exists(); 
} 
+0

お返事ありがとうございます。私はもうエラーは出ません。しかし、私の挿入ステートメントは動作していません。 \t \t this.DB = getWritableDatabase(); if(count <= 0){ this.DB.execSQL( "INSERT INTO" + champTableName + "値( '" + statsDTO.getLevelNumber()+ "'、+" statsDTO.getTime()+ "') ; "); } this.DB.close(); –

+0

構文上の問題があるかもしれません...もっと研究してください。あなたはその固定を得るでしょう。 –

+0

問題はそれが作業コードだったことです。このアプリケーションだけでなく、同じ問題を持つアプリケーションを50個追加します。それは環境と何かがあります。しかし確信していない –