데이터 모델이 나중에 변경되지 않는다는 것을 알고 있으면 데이터베이스를 "벙어리"로 내보낼 수 있습니다. DB는 파일로 저장됩니다.
public static final String CURRENT_DATABASE_PATH = "data/data/" + App.getContext().getPackageName() + "/databases/" + DatabaseHelper.DATABASE_NAME
여기서 DATABASE_NAME은 DB 생성시 사용되는 이름입니다. 다시
public static void exportDB() {
try {
File dbFile = new File(CURRENT_DATABASE_PATH);
FileInputStream fis = new FileInputStream(dbFile);
getExportDirectory();
String outFileName = createExportName();
OutputStream output = new FileOutputStream(outFileName);
byte[] buffer = new byte[1024];
int length;
while ((length = fis.read(buffer)) > 0) {
output.write(buffer, 0, length);
}
output.flush();
output.close();
fis.close();
} catch (Exception e) {
App.log(e);
}
}
그리고위한 : 여기
는 수출 (나는,이 코드가 강하게 나는 지금 찾을 수없는 다른 유래 스레드에 의해 inspirated하는 저자 아니에요) 내가 사용하는 방법이 있습니다 이 방법은 작동하지 않을 것입니다 데이터 모델을 업데이트하려면 당신은 아마/내보내기를 수동으로 실시 당신이 원하는 모든 것을 가져해야합니다, 그래서, 그러나
public static boolean importDB(String dbPath) {
try {
AppStorage.get().close();
File newDb = new File(dbPath);
File oldDb = new File(CURRENT_DATABASE_PATH);
if (newDb.exists()) {
copyFile(new FileInputStream(newDb), new FileOutputStream(oldDb));
AppStorage.get().getWritableDatabase().close();
}
AppStorage.reset();
return true;
} catch (Exception e) {
App.log(e);
}
return false;
}
를 가져옵니다.
편집 : AppStorage는 내 사용자 정의 db 래퍼입니다. 이 방법은 데이터베이스를 삭제하지 않습니다.
기존 응용 프로그램보다 수동 가져 오기/내보내기 시스템을 개발해야했지만 그게 꽤 아니 었습니다 ... 한숨 !!! –