안드로이드

[CM7] SQLiteDatabaseCorruptException: database disk images is malformed

raulyo 2012. 4. 17. 21:27

아래와 같은 Exception이 종종 발생


06-27 16:55:50.620: ERROR/Database(229): CREATE TABLE android_metadata failed
06-27 16:55:50.640: ERROR/Database(229): Failed to setLocale() when constructing, closing the database
06-27 16:55:50.640: ERROR/Database(229): android.database.sqlite.SQLiteDatabaseCorruptException: database disk image is malformed
06-27 16:55:50.640: ERROR/Database(229):     at android.database.sqlite.SQLiteDatabase.native_setLocale(Native Method)
06-27 16:55:50.640: ERROR/Database(229):     at android.database.sqlite.SQLiteDatabase.setLocale(SQLiteDatabase.java:1987)
06-27 16:55:50.640: ERROR/Database(229):     at android.database.sqlite.SQLiteDatabase.<init>(SQLiteDatabase.java:1855)
06-27 16:55:50.640: ERROR/Database(229):     at android.database.sqlite.SQLiteDatabase.openDatabase(SQLiteDatabase.java:820)
06-27 16:55:50.640: ERROR/Database(229):     at android.database.sqlite.SQLiteDatabase.openOrCreateDatabase(SQLiteDatabase.java:854)
06-27 16:55:50.640: ERROR/Database(229):     at android.database.sqlite.SQLiteDatabase.openOrCreateDatabase(SQLiteDatabase.java:847)
06-27 16:55:50.640: ERROR/Database(229):     at android.app.ContextImpl.openOrCreateDatabase(ContextImpl.java:547)


표준 안드로이드는 3.6.22 버전의 Sqlite를 쓰는데 CM7 (CyanogenMod 7)의 경우 Sqlite 3.7.2 버전을 써서 CM7에서 작성된 db를 백업해서 다른 롬에서 사용하려고 하는 경우 위와 같은 에러 발생.


http://forum.xda-developers.com/showthread.php?t=888947&page=70 백업툴들에서 주로 발생.


 
댓글
2011.06.28 11:41:27
볼레로

호환성 문제기는 하겠지만, 


DB를  바이너리고 백업하는 것은  보장이 안되는 문제 아닌가요? 


MS SQL Server  2005버전의 파일을  

MS SQL Server 6.5에  복사해 놓고, 


파일 못 열어요. 하는것과 같은 문제가 아닐까 합니다. 


댓글
2011.06.28 15:19:18
URA

개발자가 커롬까지 신경써서 개발해야할건 아니라고 봅니다. 


크게 문제되면 커롬만드는 데서 SQlite버전을 낮추겠죠.

댓글
2011.06.28 15:25:11
id: 그냥가자그냥가자

누가 갑자기 앱이 문제있다고 했을때 대응할수 있는 정도로 알아만 놓자.... 이정도겠네요....

댓글
2011.06.28 17:47:35
헤드샷

DB데이터는 raw query로 저장해놓는게 젤 편한듯.. 

댓글
2011.06.28 19:29:38
id: 회색회색

DB데이터 sqlite db 바이너리로 앱에 포함하는 경우 많이 있습니다. CM7뿐만 아니라 앞으로 최신 버전에서는 sqlite 3.7 을 탑재할 가능성도 높고, 요즘 PC 쪽 sqlite 바이너리도 3.7로 나오기 때문에 위와 같은 에러를 많이 보게 될겁니다. 안드로이드 호환성을 생각하면 db파일 만드실떄 3.6 버전 으로 작업하는게 좋습니다. 말씀하신대로 raw query로 처리하거나.