2010년 8월 24일 화요일

안드로이드 DB 파일 접근시 'file is encrypted or is not a database' 메세지가 나온다면..

안드로이드 플랫폼에서 사용하는 DB 는 sqlite 이다. 파일 DB 로서는 꽤 많이 사용되고 있다.
일단 sqlite 는 파일 DB 라서 사용하기 편하다. 그냥 DB 파일을 이래저래 옮기기도 편하고,
SQL 을 그대로 사용할 수 있으니 말이다. 안드로이드에서도 sqlite 를 사용하고 있는데, 처음 사용하는
분들이 아래와 같은 에러를 겪는 경우가 있다.

# sqlite mmssms.db
Unable to open database "mmssms.db": file is encrypted or is not a database

이 경우는 sqlite 버전이 구 버전이 아닌지 확인해 보아야 한다.
# sqlite -version
2.8.17

안드로이드에서 사용하는 SQLite 의 버전은 3 이기 때문이다. 파일의 앞 부분을 살펴보면 확인이 가능하다.
# hexdump -C mmssms.db | more
00000000  53 51 4c 69 74 65 20 66  6f 72 6d 61 74 20 33 00  |SQLite format 3.|
00000010  04 00 01 01 00 40 20 20  00 00 0b a3 00 00 00 00  |.....@  ........|
00000020  00 00 00 00 00 00 00 00  00 00 00 39 00 00 00 01  |...........9....|
00000030  00 00 00 00 00 00 00 12  00 00 00 01 00 00 00 2f  |.............../|
00000040  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
*
그래서 아래와 같이 3.X 버전으로 실행하면 문제없이 DB 접근이 가능해 진다.
# sqlite3 mmssms.db
SQLite version 3.5.9
Enter ".help" for instructions

또는 파일 명령어를 통해서 3 버전인걸 확인이 가능하다.
# file mmssms.db
mmssms.db: SQLite 3.x database, user version 47

흔히 위와 같이 에러를 겪는 경우, 그냥 별 생각없이 sqlite 로 치고 접근하면서 많이 발생한다. 3 버전이므로
sqlite3 로 접근하거나, sqlite 를 sqlite3 로 심볼릭링크를 걸어 사용하기 바란다.

댓글 없음:

댓글 쓰기