2014-03-03 32 views
1

我正在使用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

+0

我建議[使用'SQLiteAssetHelper'](https://github.com/jgilfelt/android-sqlite-asset-helper)來代替。 – CommonsWare

+0

感謝您的鏈接!我切換到使用的庫,但我仍然得到同樣的錯誤:'從資產複製數據庫... 數據庫副本完整 sqlite的返回:錯誤碼= 11,由源線40107 sqlite的發現味精=數據庫損壞返回:錯誤代碼= 11,msg =數據庫磁盤映像格式錯誤 CREATE TABLE android_metadata失敗 無法setLocale()時構造,關閉數據庫',所以它似乎問題確實與我的數據庫?不過,奇怪的是,它可以很好地工作在更高版本的SDK上。 – Nick

+0

你是如何創建數據庫的? – CommonsWare

回答

0

and add a new android_metadata-table with a locale-column and an en_us-row

現在您正在使用SQLiteAssetHelper,並給出錯誤信息(CREATE TABLE android_metadata failed),從您的包裝副本刪除您手動android_metadata表數據庫。這將作爲通過SQLiteAssetHelper解包數據庫的一部分爲您創建。

+0

嗯,這很有道理。我刪除了'android_metadata'表從數據庫和卸載並重新安裝的應用程序,但然後錯誤仍然是相同的(sqlite返回:錯誤代碼= 11,msg =數據庫損壞發現源代碼行40107; CREATE TABLE android_metadata失敗) – Nick

+0

@Nick:你可以發佈整個堆棧跟蹤? – CommonsWare

+0

我只是在不同的模擬器上嘗試了新的數據庫:它在3.0+上運行正常,但在2.2.2和2.3.7上失敗,出現上述錯誤我並不太擔心2.2明顯的兼容性原因,但薑餅支持仍然比較重要。我已經用完整的堆棧跟蹤更新了主要問題。 – Nick