2016-06-26 4 views
0

이전 데이터베이스를 새 데이터베이스로 바꾸고 싶습니다. 그렇게하려면android에서 sqlite 데이터베이스 바꾸기

  1. 데이터베이스의 이전 user_version을 확인하십시오.
  2. 이전 데이터베이스 삭제.
  3. 애셋에서 새 데이터베이스 복사 중.
  4. 새 데이터베이스의 user_version 변경 중.
  5. 내 경우에는 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(); 
       } 
} 

답변

0

, 당신은 심지어 그것을 업그레이드하려고해서는 안된다. 새 데이터베이스 버전에 새 파일 이름을 지정하면 간단하게 복사 할 수 있습니다 (SQLiteAssetHelper 사용). 그리고 이전 파일을 삭제하십시오.

+0

SQLiteAssetHelper를 소개해 주셔서 감사합니다. 하지만 때로는 이전 데이터베이스에서 일부 레코드를 가져와야합니다. 나를 괴롭히는 것은 user_version의 자동 복귀입니다. 왜 그런지 말해 줄 수 있어요? – user934820

+1

오래된 데이터를 유지하는 방법은 [다른 질문입니다] (http://stackoverflow.com/q/37094656/11654). 어쨌든 변경되지 않은 코드는 코드의 다른 곳에서 버그처럼 보입니다. –

+0

응용 프로그램을 컴파일하기 전에 새 데이터베이스의 user_version을 변경하고 db.execSQL ("PRAGMA user_version = 1");을 제거하십시오. 괜찮을까요? – user934820

관련 문제