0
이전 데이터베이스를 새 데이터베이스로 바꾸고 싶습니다. 그렇게하려면android에서 sqlite 데이터베이스 바꾸기
- 데이터베이스의 이전 user_version을 확인하십시오.
- 이전 데이터베이스 삭제.
- 애셋에서 새 데이터베이스 복사 중.
- 새 데이터베이스의 user_version 변경 중.
- 내 경우에는 1
입니다 새 user_version을 확인하지만 다시 시작할 때 새로운 user_version로 "1"을 저장하지 않는 이유는 응용 프로그램 user_version는 0으로 다시 변경? 또는 app을 컴파일하기 전에 새 데이터베이스의 user_version을 변경해야합니다.
여기 내 코드입니다. 당신이 이전 데이터베이스의 내용에 대해 상관하지 않는 경우
MySQLiteHelper db = MySQLiteHelper.instance();
int oldversion = db.getInteger("PRAGMA user_version");
Toast.makeText(MainActivity.this,oldversion + "", Toast.LENGTH_SHORT).show();
if (oldversion < 1) {
upgradeDB();// delete previous db and copy new one.
db.execSQL("PRAGMA user_version = 1");
int oldversion = db.getInteger("PRAGMA user_version");
Toast.makeText(MainActivity.this,oldversion + "", Toast.LENGTH_SHORT).show();
}
편집
void upgradeDB(){
db.renameDataBase();
db.copyDataBase();
db = MySQLiteHelper.instance();
MySQLiteUpdateHelper dbOld = MySQLiteUpdateHelper.instance();
int saved = dbOld.getInteger("select value from info where name='saved'");
int bookmark = dbOld.getInteger("select value from info where name='bookmarks'");
db.execSQL("UPDATE info set value = '" + saved + "' WHERE name = 'saved'");
db.execSQL("UPDATE info set value = '" + bookmark + "' WHERE name = 'bookmarks'");
File to = new File(db.DB_PATH, "old");
if (to.exists()) {
to.delete();
}
}
SQLiteAssetHelper를 소개해 주셔서 감사합니다. 하지만 때로는 이전 데이터베이스에서 일부 레코드를 가져와야합니다. 나를 괴롭히는 것은 user_version의 자동 복귀입니다. 왜 그런지 말해 줄 수 있어요? – user934820
오래된 데이터를 유지하는 방법은 [다른 질문입니다] (http://stackoverflow.com/q/37094656/11654). 어쨌든 변경되지 않은 코드는 코드의 다른 곳에서 버그처럼 보입니다. –
응용 프로그램을 컴파일하기 전에 새 데이터베이스의 user_version을 변경하고 db.execSQL ("PRAGMA user_version = 1");을 제거하십시오. 괜찮을까요? – user934820