नवीनतम दो सप्ताह में, मेरे ऐप को अपडेट जारी किए बिना, मैंने दूषित डेटाबेस के साथ रिपोर्ट का एक समूह प्राप्त करना शुरू कर दिया है। नीचे stacktrace है। एंड्रॉइड डेटाबेस नहीं खोल सकता है, और न ही मेरे कंप्यूटर पर sqlite-manager प्रोग्राम सकता है। हालांकि, फ़ायरफ़ॉक्स में SQLite प्रबंधक-एडन इसे खोल सकता है। कमांड "कॉम्पैक्ट डेटाबेस" चलाने के बाद, डेटाबेस तय किया गया था और मैं इसे एंड्रॉइड में खोल सकता था। क्या कोई तरीका है कि मैं अपने ऐप के भीतर ऐसा कुछ कर सकता हूं? बड़ी समस्या यह है कि मैं डेटाबेस खोलने का भी प्रयास नहीं कर सकता, क्योंकि एंड्रॉइड के नए संस्करण तुरंत हटाएंगे और डेटाबेस को प्रतिस्थापित करेंगे, जैसा कि आप नीचे दिए गए स्टैकट्रैक में देख सकते हैं। क्या PRAGMA स्टेटमेंट डेटाबेस को खोलने के बिना किसी भी तरह निष्पादित किया जा सकता है?एंड्रॉइड डेटाबेस दूषित, लेकिन SQLite प्रबंधक में खोल सकते हैं। वसूली?
सादर,
02-22 09:55:20.245: ERROR/Database(5382): CREATE TABLE android_metadata failed
02-22 09:55:20.245: ERROR/Database(5382): Failed to setLocale() when constructing, closing the database
02-22 09:55:20.245: ERROR/Database(5382): android.database.sqlite.SQLiteDatabaseCorruptException: database disk image is malformed
02-22 09:55:20.245: ERROR/Database(5382): at android.database.sqlite.SQLiteDatabase.native_setLocale(Native Method)
02-22 09:55:20.245: ERROR/Database(5382): at android.database.sqlite.SQLiteDatabase.setLocale(SQLiteDatabase.java:1950)
02-22 09:55:20.245: ERROR/Database(5382): at android.database.sqlite.SQLiteDatabase.<init>(SQLiteDatabase.java:1818)
02-22 09:55:20.245: ERROR/Database(5382): at android.database.sqlite.SQLiteDatabase.openDatabase(SQLiteDatabase.java:817)
02-22 09:55:20.245: ERROR/Database(5382): at android.database.sqlite.SQLiteDatabase.openOrCreateDatabase(SQLiteDatabase.java:851)
02-22 09:55:20.245: ERROR/Database(5382): at android.database.sqlite.SQLiteDatabase.openOrCreateDatabase(SQLiteDatabase.java:844)
02-22 09:55:20.245: ERROR/Database(5382): at android.app.ContextImpl.openOrCreateDatabase(ContextImpl.java:540)
02-22 09:55:20.245: ERROR/Database(5382): at android.content.ContextWrapper.openOrCreateDatabase(ContextWrapper.java:203)
02-22 09:55:20.245: ERROR/Database(5382): Deleting and re-creating corrupt database /mnt/sdcard/myapp/backup.sqlite
02-22 09:55:20.245: ERROR/Database(5382): android.database.sqlite.SQLiteDatabaseCorruptException: database disk image is malformed
02-22 09:55:20.245: ERROR/Database(5382): at android.database.sqlite.SQLiteDatabase.native_setLocale(Native Method)
02-22 09:55:20.245: ERROR/Database(5382): at android.database.sqlite.SQLiteDatabase.setLocale(SQLiteDatabase.java:1950)
02-22 09:55:20.245: ERROR/Database(5382): at android.database.sqlite.SQLiteDatabase.<init>(SQLiteDatabase.java:1818)
02-22 09:55:20.245: ERROR/Database(5382): at android.database.sqlite.SQLiteDatabase.openDatabase(SQLiteDatabase.java:817)
02-22 09:55:20.245: ERROR/Database(5382): at android.database.sqlite.SQLiteDatabase.openOrCreateDatabase(SQLiteDatabase.java:851)
02-22 09:55:20.245: ERROR/Database(5382): at android.database.sqlite.SQLiteDatabase.openOrCreateDatabase(SQLiteDatabase.java:844)
02-22 09:55:20.245: ERROR/Database(5382): at android.app.ContextImpl.openOrCreateDatabase(ContextImpl.java:540)
02-22 09:55:20.245: ERROR/Database(5382): at android.content.ContextWrapper.openOrCreateDatabase(ContextWrapper.java:203)
संपादित करें: मैं प्रबंधक इस तरह डेटाबेस को खोलने के लिए:
db = SQLiteDatabase.openDatabase(database, null, SQLiteDatabase.NO_LOCALIZED_COLLATORS);
लेकिन जब मैं रन:
String sqlQuery = "pragma integrity_check";
db.execSQL(sqlQuery);
मैं इस मिल:
ERROR/AndroidRuntime(9144): Caused by: android.database.sqlite.SQLiteDatabaseCorruptException: database disk image is malformed: pragma integrity_check
संपादित 2: मुझे एहसास हुआ है कि डेटाबेस को खाली करने से समस्या ठीक हो जाती है। लेकिन अगर मैं अपने ऐप के अंदर से exuSQL ("वैक्यूम") के साथ वैक्यूम, यह मदद नहीं करता है। ऐसा क्यों है? : '(
धन्यवाद, वास्तव में दिलचस्प लगता है! – pgsandstrom
@ निकोलस राउल क्या आप समझा सकते हैं, एसक्यूएलजेट ओपी की समस्या को कैसे हल करेगा/इसे रोक देगा? मैं उत्सुक हूं, क्योंकि मुझे ओपी के समान मुद्दे हैं :) – AgentKnopf
SQLite में यह बग नहीं है –