주의할 사항:
- 반드시 DB파일 복사 후 직접 DB 버전을 세로운 버전으로 셋팅해주어야 한다.
- onCreate() 또는 onUpgrade() 내부에서는 다음의 코드를 실행시키면 기존 DB Connection이 여전히 살아있어 기존의 Database file을 삭제할 수 없는 문제가 발생하므로 가급적 onCreate()나 onUpgrade() 내에서 다음의 함수를 호출하는 건 피한다.
private void replaceDatabase() { // DELETE EXISTING DATABASE FILE if (mContext.deleteDatabase(DBNAME) == true) Log.i("SQL", "COMPLETE: DELETE DATABASE"); // COPY DATABASE FILE FROM ASSETS INTO DEVICE AssetManager manager = mContext.getAssets(); File dbFile = new File(DBPATH + DBNAME); try { InputStream is = manager.open(DBNAME); BufferedInputStream bis = new BufferedInputStream(is); // IF THERE EXISTS NO SUCH DIRECTORY(FILE), CREATE NEW ONE. if (dbFile.exists() == false) dbFile.createNewFile(); // COPY CONTENTS OF DATABASE FILE BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(dbFile)); int length = -1; byte[] buffer = new byte[1024]; while ((length = bis.read(buffer, 0, 1024)) != -1) { bos.write(buffer, 0, length); } bos.flush(); bos.close(); bis.close(); } catch (IOException e) { } // SET NEW DATABASE VERSION SQLiteDatabase db = SQLiteDatabase.openDatabase(DBPATH + DBNAME, null, SQLiteDatabase.OPEN_READWRITE); db.setVersion(DBVERSION); db.close(); }
.