2010년 8월 11일

PC에서 작성한 SQLite 파일을 안드로이드에서 사용하기

이 방법은 아주 간단합니다. SQLiteDatabase 객체의 openDatabase 메소드를 사용하면 됩니다.

자세한 사항은 안드로이드 API 문서인 http://developer.android.com/reference/android/database/sqlite/SQLiteDatabase.html를 참고하시구요. 간단히만 설명드리면,

openDatabase 메소드는 3개의 파라미터를 받습니다.
 - path : 데이터베이스 절대 파일 위치

 - factory : 그냥 null로 주시면 됩니다.
 - flags : 읽기/쓰기 겸용이면 OPEN_READWRITE, 읽기 전용이면 OPEN_READONLY
만약 sd 카드에 저장한 withbible_v1_6_0/bible 디렉토리에 kjv.db 파일을 사용하신다면 아래와 같이 쓰시면 됩니다.

String path =  "/sdcard/withbible_v1_6_0/bible/kjv.db";

SQLiteDatabase sqlite = null;
sqlite = SQLiteDatabase.openDatabase(path, null, SQLiteDatabase.OPEN_READONLY);

sd 카드가 아닌 메모리의 파일을 쓰신다면, path 부분을 아래와 같이 바꿔주시면 됩니다. 아래에서 this는 context 객체를 말합니다.

String path = this.getFilesDir() + "/withbible_v1_6_0/bible/kjv.db";
PC에서 생성한 데이터베이스 파일은 안드로이드 assets 폴더나 res -> raw 폴더에 저장을 하시고, 필요시 sd 카드나 메모리로 복사해서 사용하시면 됩니다.  아래의 코드는 raw 폴더에 저장되어 있고, kjv.zip으로 압축되어 있을 경우에 사용방법입니다. 참고로, 안드로이드는 raw 폴더의 파일이 1M가 넘으면 꼭 압축을 해야합니다. 아래에서 this는 context 객체를 의미합니다.

InputStream is = this.getResources().openRawResource(R.raw.kjv);

ZipInputStream zis = new ZipInputStream(is);
zis.getNextEntry();

String outputFilePath = this.getFilesDir() + "/withbible_v1_6_0/bible/kjv.db";

FileOutputStream fos = new FileOutputStream(outputFilePath);
byte[] buffer = new byte[4096];
while(true) {
    int readSize = zis.read(buffer, 0, buffer.length);
    if (readSize==-1) break;
    fos.write(buffer, 0, readSize);
}

fos.close();
zis.close();
is.close();

댓글 없음:

댓글 쓰기