2016년 6월 20일 월요일

[안드로이드 개발] 미리 만들어 놓은 Database를 불러와서사용하기

미리 만들어 놓은 sqlite 데이타베이스를 

불러와서 사용하는 방법에 대해 알아보자.

특히 사전 등과 같이 많은 데이타가 앱인 경우 

앱에 포함시켜 배포하고 최초 실행시 복사하여

사용한다.

---------------------[작업 순서]------------------------

1. assets/db 폴더를 생성한다.

- 안드로이드 app/src/main/ 아래 직접 생성한다.

- db폴더안에 database파일을 복사하여 둔다.


2. App 최초실행시 내부로 복사한다.

- onCreate 함수에서 기존의 테이블 생성하는 코드를 모두 삭제하고 

사용자 데이타베이스 유무를 체크하여

없을 경우 복사하여 사용한다.

// Checking whether file is or not
public boolean isCheckDatabase(){
String filePath = PACKAGE_DIRECTORY + "/databases/" + DATABASE_NAME;
File file = new File(filePath);
if (file.exists()) {
return true;
}
return false;
}
// Copying inside app storage from "/db/xxxx.s3db" in assetspublic void copyDataBase(){
    Log.d("Working", "copyDatabase");    AssetManager manager = mContext.getAssets();    String folderPath = PACKAGE_DIRECTORY + "/databases";    String filePath = PACKAGE_DIRECTORY + "/databases/" + DATABASE_NAME;    File folder = new File(folderPath);    File file = new File(filePath);
    FileOutputStream fileOut = null;    BufferedOutputStream bufferOut = null;    try {
        InputStream inputStr = manager.open("db/" + DATABASE_NAME);        BufferedInputStream bufferStr = new BufferedInputStream(inputStr);
        if (folder.exists()) {
        }else{
            folder.mkdirs();        }


        if (file.exists()) {
            file.delete();            file.createNewFile();        }

        fileOut = new FileOutputStream(file);        bufferOut = new BufferedOutputStream(fileOut);        int read = -1;        byte[] buffer = new byte[1024];        while ((read = bufferStr.read(buffer, 0, 1024)) != -1) {
            bufferOut.write(buffer, 0, read);        }

        bufferOut.flush();
        bufferOut.close();        fileOut.close();        bufferStr.close();        inputStr.close();    } catch (IOException e) {
        Log.e("Error : ", e.getMessage());    }
}

public void onCreate(SQLiteDatabase db) {
    boolean bResult = isCheckDatabase();    // DB가 있는지?    Log.d("Workign", "DataBase Check="+bResult);    if(!bResult){  // DB가 없으면 복사        copyDataBase();    }
}

댓글 없음:

댓글 쓰기