En son iki hafta içinde, uygulamamdaki bir güncellemeyi yayınlamadan, bozuk veritabanlarıyla ilgili bir sürü rapor almaya başladım. Aşağıda stacktrace. Android veritabanını açamıyor ve bilgisayarımdaki sqlite-manager programını da yapamadı. Ancak, firefox’a SQLite manager-addon onu açabilir. "Kompakt veritabanı" komutunu çalıştırdıktan sonra, veritabanı düzeltildi ve Android'de açabiliyordum. Uygulamamda böyle bir şey yapmanın bir yolu var mı? Büyük sorun şu ki, veritabanını açmayı denemem, çünkü Android'in daha yeni sürümleri veritabanını derhal silecek ve değiştirecek. PRAGMA İfadeleri bir şekilde veritabanını açmadan gerçekleştirilebilir mi?Android veritabanı bozuk, ancak SQLite Manager'da açılabilir. Kurtarılabilir?
Selamlar,
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)
Düzenleme:
db = SQLiteDatabase.openDatabase(database, null, SQLiteDatabase.NO_LOCALIZED_COLLATORS);
Ama çalıştırdığınızda bu: Ben müdür böyle veritabanını açmak için
String sqlQuery = "pragma integrity_check";
db.execSQL(sqlQuery);
Ben bu olsun:
ERROR/AndroidRuntime(9144): Caused by: android.database.sqlite.SQLiteDatabaseCorruptException: database disk image is malformed: pragma integrity_check
Düzenleme2: Veritabanını süpürmenin sorunu çözdüğünü fark ettim. Ama benim app içinden exeSQL ("vakum") ile vakum, bu yardımcı olmaz. Bu neden? : '(
Teşekkürler, aslında oldukça ilginç görünüyor! – pgsandstrom
@Nicolas Raoul SQLJet'in OP problemini nasıl çözeceğini/engelleyeceğini açıklayabilir misiniz? Ben merak ediyorum, çünkü OP ile aynı sorunları yaşıyorum :) – AgentKnopf
SQLite sadece bu hata yok –