安卓 - 数据库磁盘映像格式错误

16

在我的Android应用中,我遇到了“database disk image is malformed”错误。导致这个错误的原因是什么?

是未关闭的数据库?多个线程访问数据库?还是Android系统本身损坏了?

谢谢。

android.database.sqlite.SQLiteDatabaseCorruptException: database disk image is malformed
   android.database.sqlite.SQLiteQuery.native_fill_window(Native Method)
   android.database.sqlite.SQLiteQuery.fillWindow(SQLiteQuery.java:75)
   android.database.sqlite.SQLiteCursor.fillWindow(SQLiteCursor.java:288)
   android.database.sqlite.SQLiteCursor.getCount(SQLiteCursor.java:269)
   android.database.AbstractCursor.moveToPosition(AbstractCursor.java:171)
   android.database.AbstractCursor.moveToFirst(AbstractCursor.java:248)
...

我找到的这个解决方案可能会对你有所帮助。 修复Android Studio中SQLite数据库格式错误的问题 - Kingsley Onwus
2个回答

4
我遇到过很多人报告在Android上出现sqlite损坏问题的情况。大多数时候与任务杀手有关,但仍有一小部分人经历随机SQLite损坏。
例如,这个问题:http://code.google.com/p/android/issues/detail?id=4866 JRL上面的链接也非常有用,可以了解哪些事件会导致损坏的SQLite DB图像。
此外,SQLite本身最近已经进行了修补,以解决各种(罕见的)数据损坏场景。请参见http://www.sqlite.org/changes.html。因此,随着Android的发展,随附的应用程序(如SQLite)也会更新版本。
归根结底,作为程序员,我们只能采取有限的措施来防范SQLite损坏,因此有时将安全机制编码到我们的应用程序中是有优势的,例如定期将DB备份到SDCard(这就是我所做的)。

你如何定期备份数据库?使用复制命令吗?还是使用 NDK 方法或从代码中将一个数据库简单地复制到另一个数据库? - siddhusingh

3
错误从本地代码传递到Java,因此您需要查看可能导致SQLite损坏的原因。这里是SQLite网站上列出的由于SQLite中的错误导致损坏的网页,这里是另一个标题为如何损坏您的数据库的网页。请注意保留HTML标记。

2
这些似乎都是“低级”问题。这不是我可以从代码中解决的。这意味着某个东西或某个人(应用杀手)可能会在某个时候杀掉我的应用程序,然后数据库就会受到损坏?当它被损坏后,我该如何修复它?谢谢。 - Daniel Benedykt

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接