개발/안드로이드 App

[팁]기존에 생성된 (Sqlite3) DB를 안드로이드에서 이용하기

소혼 2010. 6. 30. 21:15
반응형
전체 예제 코드를 http://bunhere.tistory.com/205 에 추가했습니다.
약간 복잡한 기초 데이터를 위해 초기 실행시 Create Table 도 하고 insert도 할 수 있겠지만, 별도의 db 파일을 만들어 관리하고 싶다면 아래와 같은 방법을 쓰는 것도 한가지 방법입니다.


1. db 파일을 assets에 넣습니다.


 2. 아래 함수를 적당한 위치에 넣습니다.
풀 코드가 아니라 크게 도움은 안되지만 컨셉을 이해하실 수 있을 것이라고 생각됩니다.ROOT_DIR은 아래와 같이 선언되어 있습니다. 경로는 자기 패키지 경로로 수정해주시면 됩니다.

[2010-09-30] 간단히 설명 추가합니다.
4번 라인에서 mkdirs를 통해 폴더를 생성하고자 노력합니다. 일단 만들어져있으면 이 함수를 실패할 것입니다.
그러나 이미 원하는 목적(폴더생성)은 되어 있을 것이므로 문제가 되지 않습니다.
중요한 점 하나는 /data/data/ 아래에는 자기 패키지가 있는 곳 외에는 수정이 불가능합니다.
따라서 ROOT_DIR이 이상할 경우 mkdirs는 폴더가 없더라도 실패합니다.

5번라인에서 해당 폴더 아래 DATABASE_NAME 변수가 가르키는 이름을 가진 파일이 있는지 체크합니다.
이 파일의 이름은 반드시 assets에 복사해놓은 파일명과 동일해야 합니다.
(테이블 명이 아닙니다!)
왜냐하면 9번 라인에서 assetManager를 오픈할 때 이 DATABASE_NAME을 쓰기 때문입니다.



DATABASE_NAME은 assets에 복사해놓은 파일명(첫번째 그림 참조)입니다 이 경우 lecture.db가 되겠네요.저는 폴더를 따로 만들었습니다. 이를 위해 먼저 3,4번 라인에서 패키지 경로 밑에 database란 폴더를 생성합니다.mkdirs는 이미 폴더가 있으면 실패하게 됩니다.
5번 라인에서 파일을 읽어드립니다.
6번 라인과 같이 파일의 길이가 0보다 작다는 것은 파일이 없다는 의미라고 생각했습니다. 따라서 파일을 복사하는 그 아래 코드(7번~18번)를 실행하게 됩니다.asset의 파일을 읽어오기 위해 7번 라인과 같이 assetManager를 이용해서 파일을 오픈합니다.나머지 내용들은 자바이므로 생략합니다.혹시 이해가 안되는 부분이나 더 나은 방법이 있다면 답글 주세요.


허접한 글이지만, 도움이 되셨다면 아래 손가락 꾹 눌러주세요.



반응형