我正在使用this方法在第一次啓動應用程序時,將預先存在的sqlite數據庫從我的資產目錄複製到應用程序的/ databases /目錄。這適用於不同的SDK的水平和我的4.4設備模擬器罰款,但有以下logcat的消息未能通過2.2.2設備上:僅在Android 2.2上SQLite-db損壞
sqlite returned: error code = 11, msg = database corruption found by source line 40107
進一步對SELECT locale FROM android_metadata failed
還有其他的SO-問題與此錯誤,但我的數據庫肯定包含android_metadata
-table與locale
列和en_US
條目(這就是爲什麼該應用程序在許多其他模擬器和更高的SDK設備上工作),並不是很大(32KB),我讀可能是一個問題。
更新:我轉向使用SQLiteAssetHelper-library,但我仍然得到同樣的錯誤:
copying database from assets...
database copy complete
sqlite returned: error code = 11, msg = database corruption found by source line 40107
sqlite returned: error code = 11, msg = database disk image is malformed
CREATE TABLE android_metadata failed
Failed to setLocale() when constructing, closing the database
看來SQLiteOpenHelper
(不是AssetHelper
)正試圖創建android_metadata
表(即使它是已經存在)並因此而失敗?
更新2:完整的堆棧跟蹤可以發現here
我建議[使用'SQLiteAssetHelper'](https://github.com/jgilfelt/android-sqlite-asset-helper)來代替。 – CommonsWare
感謝您的鏈接!我切換到使用的庫,但我仍然得到同樣的錯誤:'從資產複製數據庫... 數據庫副本完整 sqlite的返回:錯誤碼= 11,由源線40107 sqlite的發現味精=數據庫損壞返回:錯誤代碼= 11,msg =數據庫磁盤映像格式錯誤 CREATE TABLE android_metadata失敗 無法setLocale()時構造,關閉數據庫',所以它似乎問題確實與我的數據庫?不過,奇怪的是,它可以很好地工作在更高版本的SDK上。 – Nick
你是如何創建數據庫的? – CommonsWare