Android数据库文件损坏

时间:2011-11-10 06:39:14

标签: android database

我有一个应用程序,允许用户将应用程序SQLite数据库文件保存到SD卡。这个功能已经存在超过一年,并且工作得很好。我有用户通过电子邮件向我发送他们的数据库文件,以防出现无法重现的错误。

最近,用户向我发送了他的数据库文件,当我尝试将它们加载到我的应用程序中时(通过将它们放入应用程序的数据库文件位置),应用程序在尝试打开数据库文件时崩溃了。此用户在过去之前向我发送了他的文件,没有任何问题。

我当时和现在的应用程序之间的唯一区别是:1)我添加了app-2-SD功能,以及2)我的应用程序目标2.2现在与1.6当时(但1.5是两种情况下的最小SDK版本)

用户表示他将应用程序放在SD卡上,然后应用程序开始崩溃。它甚至没有让他选择提交错误报告。

当我将他的文件放入模拟器时,我得到了以下堆栈跟踪:

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)

他之前通过电子邮件发送了我的数据,文件中有正确的数据库名称和扩展名,所以我给了他怀疑的好处,并没有假设他发送了错误的文件。有没有人见过这个问题,并知道任何可能的原因和/或解决方案?

更新 如果它有任何区别,我从用户那里发现他的手机是HTC Evo 4G。我想我在最新的Android版本中读到了一些关于加密数据库文件的内容,其中数据库文件存储在/ data / secure / ...而不是/ data / data / ...我想知道这是否可以相关?在任何情况下,在进一步询问用户之后,我至少知道它是数据库文件中存在问题的一个特定表。我的应用程序的不同部分与数据库文件中的不同表进行交互。该应用程序工作正常,并允许他访问其他表时保存/读取数据,但当他访问一个特定的表时,只是尝试打开该文件会产生他的错误。我想我可以添加一个丑陋的修复程序,如果它发生,捕获此异常,然后删除损坏的表,然后重新创建它。想法?

1 个答案:

答案 0 :(得分:0)

我还有一个带有(相当小的)数据库的应用程序,最近由于数据库问题无法重现,我收到崩溃报告。

玩我的应用并真正推动它最终导致崩溃。

我的理由是因为many fast opening/closing/update requests, interruption of the app, language changes during the app, etc so the system somehow corrupted the db.

我现在实施的解决方案是

a. close/reopen the db often to avoid problems 

b. have a consistency-check routine for every save or retrieve of data now - lots of overhead - but that cleared it fo me so far...

ps虽然和你一样,但我没有得到同样的崩溃报告。我现在在我的桌面上有几个不同的Android手机进行测试,几乎从来没有让它与最新的高端手机崩溃。 这些问题似乎更常发生在较小的内存/速度较慢的cpu手机上,而不是快速的高端手机。 - 老实说,我仍然对此感到困惑! ......可能SD卡的使用与某种程度上有关吗?