SQLite-db仅在Android 2.2上损坏

时间:2014-03-03 11:11:03

标签: android sqlite android-sqlite

我正在使用this方法在我们的assets-directory中将预先存在的sqlite-database复制到第一个应用启动时的app / databases / -directory。这适用于具有不同SDK级别的模拟器和我的4.4设备,但在具有以下logcat消息的2.2.2设备上失败:

sqlite returned: error code = 11, msg = database corruption found by source line 40107 以及SELECT locale FROM android_metadata failed

此错误还有其他SO问题,但我的数据库肯定包含android_metadata - 表格,其中包含locale列和en_US条目(这就是应用运行的原因)许多其他模拟器和更高版本的SDK设备)并且不大(32KB),我读到这可能是一个问题。

更新:我转而使用SQLiteAssetHelper-library,但仍然遇到同样的错误:

  

从资产中复制数据库...

     

数据库副本完成

     

sqlite返回:错误代码= 11,msg =源代码行40107找到的数据库损坏

     

sqlite返回:错误代码= 11,msg =数据库磁盘映像格式错误

     

CREATE TABLE android_metadata失败

     

构建,关闭数据库

时无法设置locale()

似乎SQLiteOpenHelper(而不是AssetHelper)正在尝试创建android_metadata表(即使它已经存在)并因此而失败?

更新2:可以找到完整的堆栈跟踪here

1 个答案:

答案 0 :(得分:0)

  

并添加一个新的android_metadata表,其中包含locale-column和en_us-row

现在您正在使用SQLiteAssetHelper并给出错误消息(CREATE TABLE android_metadata failed),请从数据库的打包副本中删除手动android_metadata表。这将作为通过SQLiteAssetHelper解压缩数据库的一部分为您创建。