मेरा मानना है कि डेटाबेस को वास्तव में कॉपी और लोड (खोला) सफलतापूर्वक किया गया है और समस्या यह है कि कॉपी किए गए डेटाबेस में Dictionary1 नाम की एक तालिका नहीं है निम्नलिखित का प्रयास करते समय:-
Cursor cursor = sd.query("Dictionary1" ,null, null, null, null, null, null);
at com.elytelabs.myapplication.MainActivity.fetchData(MainActivity.java:142)
के अनुसार
इसलिए आपको कॉपी किए गए डेटाबेस में तालिका के अनुसार होने के लिए तालिका का नाम सही करना होगा ।
आप डेटाबेस जानकारी प्रदर्शित करने के लिए इस प्रश्नोत्तर का उपयोग करना चाह सकते हैं।
संदेश :-
11-22 23:14:56.455 13193-13193/com.elytelabs.myapplication E/SQLiteLog: (14) cannot open file at line 30052 of [b3bb660af9]
11-22 23:14:56.455 13193-13193/com.elytelabs.myapplication E/SQLiteLog: (14) os_unix.c:30052: (2) open(/data/data/com.elytelabs.myapplication/databases/dictionary.db) -
11-22 23:14:56.455 13193-13193/com.elytelabs.myapplication E/SQLiteDatabase: Failed to open database '/data/data/com.elytelabs.myapplication/databases/dictionary.db'.
android.database.sqlite.SQLiteCantOpenDatabaseException: unknown error (code 14): Could not open database
etc .........
checkDatabase
. से परिणाम विधि लागू की जाती है क्योंकि उस समय डेटाबेस नहीं मिला है क्योंकि इसे संपत्तियों से कॉपी नहीं किया गया है (जैसा कि इसे करना चाहिए)।
यह विधि getReadableDatabase
. का उपयोग करती है यह देखने की कोशिश करने की विधि कि क्या डेटाबेस मौजूद है। यह विधि हमेशा स्टैकट्रेस प्रिंट करती है।
एक वैकल्पिक तरीका बदला जा सकता है :-
private boolean checkDataBase(){
// this.getReadableDatabase();
SQLiteDatabase checkDB = null;
try{
String myPath = DB_PATH ;
checkDB = SQLiteDatabase.openDatabase(myPath, null, SQLiteDatabase.OPEN_READONLY);
}catch(SQLiteException e){
//database does't exist yet.
}
if(checkDB != null){
checkDB.close();
}
return checkDB != null ? true : false;
}
के साथ :-
private boolean checkDataBase(){
File db = new File(DB_PATH);
if(db.exists()) return true;
File dir = new File(db.getParent());
if (!dir.exists()) {
dir.mkdirs();
}
return false;
}
यह यह देखने का प्रयास करता है कि क्या डेटाबेस फ़ाइल मौजूद है (और पथ में एक गैर-मौजूदा निर्देशिका भी बनाता है जैसे कुछ परिस्थितियों में डेटाबेस निर्देशिका मौजूद नहीं हो सकती है।)
यदि उपरोक्त का उपयोग किया जाता है तो आपके संदेश अधिक पसंद आते हैं :-
11-22 23:14:56.525 13193-13193/com.elytelabs.myapplication E/SQLiteLog: (1) no such table: Dictionary1
11-22 23:14:56.525 13193-13193/com.elytelabs.myapplication D/AndroidRuntime: Shutting down VM
11-22 23:14:56.525 13193-13193/com.elytelabs.myapplication E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.elytelabs.myapplication, PID: 13193
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.elytelabs.myapplication/com.elytelabs.myapplication.MainActivity}: android.database.sqlite.SQLiteException: no such table: Dictionary1 (code 1): , while compiling: SELECT * FROM Dictionary1
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2342)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2404)
at android.app.ActivityThread.access$900(ActivityThread.java:154)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1315)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5296)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:912)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:707)
Caused by: android.database.sqlite.SQLiteException: no such table: Dictionary1 (code 1): , while compiling: SELECT * FROM Dictionary1
at android.database.sqlite.SQLiteConnection.nativePrepareStatement(Native Method)
at android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:889)
at android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:500)
at android.database.sqlite.SQLiteSession.prepare(SQLiteSession.java:588)
at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:58)
at android.database.sqlite.SQLiteQuery.<init>(SQLiteQuery.java:37)
at android.database.sqlite.SQLiteDirectCursorDriver.query(SQLiteDirectCursorDriver.java:44)
at android.database.sqlite.SQLiteDatabase.rawQueryWithFactory(SQLiteDatabase.java:1316)
at android.database.sqlite.SQLiteDatabase.queryWithFactory(SQLiteDatabase.java:1163)
at android.database.sqlite.SQLiteDatabase.query(SQLiteDatabase.java:1034)
at android.database.sqlite.SQLiteDatabase.query(SQLiteDatabase.java:1202)
at com.elytelabs.myapplication.MainActivity.fetchData(MainActivity.java:142)
at com.elytelabs.myapplication.MainActivity.onCreate(MainActivity.java:82)