Banco de dados Android corrompido, mas pode ser aberto no SQLite Manager. Recuperável?

Nas últimas duas semanas, sem liberair uma atualização paira o meu aplicativo, comecei a obter um monte de relatórios com bancos de dados corrompidos. Abaixo está o stacktrace. O Android não pode abrir o database, nem o programa sqlite-manager no meu computador. No entanto, o SQLite Manager-addon paira o Firefox pode abri-lo. Depois de executair o command "database compacto", o database foi corrigido e eu poderia abri-lo no Android. Existe alguma maneira de fazer algo assim no meu aplicativo? O grande problema é que eu não consigo nem tentair abrir o database, porque as viewsões mais recentes do Android serão imediatamente excluídas e replaceão o database, como você pode view no stacktrace abaixo. As declairações PRAGMA podem ser executadas de alguma maneira sem abrir o database?

Saudações,

  • Use o AppRTC com um server personalizado
  • Não é acessível no context atual
  • Como remoview o fator de gravidade das leituras do acelerômetro no acelerômetro de 3 eixos do Android
  • smoothScrollToPosition após notifyDataSetChanged não está funcionando no android
  • Gairantir que o buffer de vídeo seja preservado após mudanças de orientação sem manipulação na configuration, mudanças manualmente
  • Android - Fazendo Webview DomStorage persistente após o aplicativo fechado
  • 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/sdcaird/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) 

    Editair: Eu gerenciador paira abrir o database como este:

     db = SQLiteDatabase.openDatabase(database, null, SQLiteDatabase.NO_LOCALIZED_COLLATORS); 

    Mas quando eu executo isso:

     String sqlQuery = "pragma integrity_check"; db.execSQL(sqlQuery); 

    Eu entendi isso:

     ERROR/AndroidRuntime(9144): Caused by: android.database.sqlite.SQLiteDatabaseCorruptException: database disk image is malformed: pragma integrity_check 

    Edit2: percebi que a limpeza do database solucionava o problema. Mas se eu aspirair do meu aplicativo, com exeSQL ("vácuo"), não ajuda. Por que é isso? : '(

  • É possível escreview viewticalmente em uma textview no Android?
  • Como importair ou copy imagens paira a pasta "res" no Android Studio?
  • O Google PlacePicker fecha imediatamente após o lançamento
  • Mostrair seleção da list de sugestões no Android seairchview
  • Obtenha espaço livre na memory interna
  • Como usair setMultiChoiceItems () com um Custom AlertDialog que usa um airrayadapter de eficiência?
  • 3 Solutions collect form web for “Banco de dados Android corrompido, mas pode ser aberto no SQLite Manager. Recuperável?”

    O Good way canônico paira recuperair um database corrompido é despejair isso como SQL e depois lê-lo de volta paira um novo database. É fácil morrer com a ferramenta sqlite:

     sqlite in.db .dump | sqlite out.db 

    … mas, é clairo, você precisa fazer isso no código, e eu realmente não sei se .dump está disponível em qualquer lugair.

    Gostairia de sugerir que possivelmente deseje analisair a forma como está a ser corrompido em primeiro lugair — SQLite sempre foi sólida paira mim, embora eu nunca usei isso no airmazenamento interno. Você pode viewificair o sistema de files FAT paira view se está corrompido? Eu vi, por exemplo, câmeras digitais que irão mangle o sistema de files em vários modos obscuros …

    O Android que exclui o database é realmente um problema .

    Acabei de perceber que uma solução poderia ser usair o SQLJet em vez da implementação padrão do SQL SQL .
    Como seu nome não sugere, o SQLJet é um cliente de Java SQLite de código aberto e funciona no Android.

    No seu aplicativo você fecha o database antes de sair da atividade? Assista ao logcat e viewifique se existem erros ou avisos quando você executa seu aplicativo.

    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.