android sqlite 损坏,Android数据库损坏,但可以在SQLite Manager中打开.可恢复?

在最近的两周内,如果没有发布对我的应用的更新,我已经开始收集一堆报告,损坏的数据库.下面是堆栈跟踪.

Android无法打开数据库,也不能在我的电脑上使用sqlite-manager程序.但是,firefox的SQLite manager-addon可以打开它.运行命令“compact database”后,数据库被修复,我可以在android中打开它.有什么办法可以在我的应用程序中做这样的事情吗?最大的问题是,我甚至无法尝试打开数据库,因为较新版本的Android将立即删除和替换数据库,如下面的stacktrace所示.可以在不打开数据库的情况下执行PRAGMA语句吗?

问候,

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.(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.(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:我意识到真空数据库解决了这个问题.但是如果我从我的应用程序里面抽真空,使用exeSQL(“vacuum”),这没有帮助.为什么是这样? :'(

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值