2016-03-21 11 views
-1

Android uygulamasında veritabanı bağlantısı ile ilgili bir sorunum var. Tuhaf olan, her şeyin yolunda gitmesi. İyi bir sabah, bu problemi almaya başladım. Ve mevcut iyi çalışan uygulamalar ile.Android Vergi SQLiteCantOpenDatabaseException ile

Bir tür çevre sorunu olduğuna inanıyorum, ancak bunu izleyemiyorum. Yardım adamlarına ihtiyacım var. SOF'taki mevcut mesajları kontrol ettim. Önerdim, hiçbir şey yardım etmedi.

Benim DB bağlantı programı:

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; 
} 

}

ve benim günlüğü:

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

şu anda artık ediliyor şekilde karmaşık olması gerekmez; veritabanını mı? –

cevap

1

varsa veritabanını kontrol edebilirsiniz başka yolu yoktur. Andre Rocha tarafından cevap olarak, `SQLiteOpenHelper` kullandığınız Neden,` onCreate`/`onUpdate` uygulamadan, checkDbExists() Burada içeride gibi

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

Yanıt için teşekkürler. Ben artık hatayı alamıyorum. Ama benim ekleme ifadelerim çalışmıyor. \t \t this.DB = getWritableDatabase(); (say <= 0) { this.DB.execSQL ("INSERT INTO" + champTableName + "Değerler ('" + statsDTO.getLevelNumber() + "', '" + statsDTO.getTime() + "') ; "); } this.DB.close(); –

+0

Bazı sözdizimi sorunu olabilir ... Araştırma daha fazla .. bu sabit alırsınız .. –

+0

Sorun, onun bir çalışma kodu olmasıdır. Sadece bu uygulamada değil, aynı sorunu taşıyan 50 tane uygulama var. Çevre ile ilgili bir şey olabilir. Ama emin değilim ne –