주의할 사항:
- 반드시 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();
}
.