在我的应用程序中,我创建了一个包含多个表的数据库文件(假设有3个表)。在更新到当前版本的应用程序后,他开始遇到应用程序崩溃后,应用程序用户通过电子邮件向我发送了他的数据库文件(我将文件保存到SD卡)。我的更新不涉及任何数据库更改,它提供了对app-2-SD卡功能的支持,用户说他使用了该功能。我很肯定我保存到SD卡的代码有效(超过一年),但如果您想了解更多背景信息,请参阅我的其他帖子:Android Database file corruption。
当我使用SQLite浏览器打开此用户的.db文件时,不会显示任何内容。没有表格,没有数据等...当我使用文本编辑器打开文件时,我可以看到他的所有数据。在这种情况下,有没有办法以某种方式“修复”这个文件?
当用户尝试打开表#1时发生崩溃。只是尝试打开表格导致下面的例外。用户告诉我,他能够在访问表#2和#3的区域中成功地与应用程序进行交互。我知道他可以删除文件以通过崩溃,但随后所有数据都会丢失,所以我想尽可能修复它。
...
11-09 22:32:04.275: SELECT locale FROM android_metadata failed
11-09 22:32:04.275: Failed to setLocale() when constructing. closing the database.
11-09 22:32:04.275: ERROR/AndroidRuntime(757): Caused by: android.database.sqlite.SQLiteException: file is encrypted or is not a database
11-09 22:32:04.275: ERROR/AndroidRuntime(757): at android.database.sqlite.SQLiteDatabase.native_setLocale(Native Method)
11-09 22:32:04.275: ERROR/AndroidRuntime(757): at android.database.sqlite.SQLiteDatabase.setLocale(SQLiteDatabase.java:1636)
11-09 22:32:04.275: ERROR/AndroidRuntime(757): at android.database.sqlite.SQLiteDatabase.<init>(SQLiteDatabase.java:1586)
11-09 22:32:04.275: ERROR/AndroidRuntime(757): at android.database.sqlite.SQLiteDatabase.openDatabase(SQLiteDatabase.java:638)
11-09 22:32:04.275: ERROR/AndroidRuntime(757): at android.database.sqlite.SQLiteOpenHelper.getReadableDatabase(SQLiteOpenHelper.java:168)
我想知道是否有我可以遵循的工具或指南可以帮助我修复这个特定的SQLite文件。感谢。