2016-06-26 2 views
0

Я хочу заменить предыдущую базу данных новой базой данных. Для этого я являюсьЗамена базы данных sqlite в android

  1. Проверка предыдущей пользовательской_версии базы данных.
  2. Удаление старой базы данных.
  3. Копирование новой базы данных из активов.
  4. Изменение user_version новой базы данных.
  5. Верификация новый user_version в моем случае это 1.

Но когда я перезапустить user_version приложение снова изменено на 0. Почему это не спасение «1» в качестве нового user_version? Или я должен изменить 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

Смежные вопросы