미리 만들어 놓은 sqlite 데이타베이스를
불러와서 사용하는 방법에 대해 알아보자.
특히 사전 등과 같이 많은 데이타가 앱인 경우
앱에 포함시켜 배포하고 최초 실행시 복사하여
사용한다.
---------------------[작업 순서]------------------------
1. assets/db 폴더를 생성한다.
- 안드로이드 app/src/main/ 아래 직접 생성한다.
- db폴더안에 database파일을 복사하여 둔다.
2. App 최초실행시 내부로 복사한다.
- onCreate 함수에서 기존의 테이블 생성하는 코드를 모두 삭제하고
사용자 데이타베이스 유무를 체크하여
없을 경우 복사하여 사용한다.
// Checking whether file is or notpublic 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(); } }
댓글 없음:
댓글 쓰기