2016-06-26 7 views
0

Ich möchte vorherige Datenbank durch neue Datenbank ersetzen. Um das zu tun, bin ichErsetzen SQL-Datenbank in Android

  1. Überprüfung auf vorherige user_version der Datenbank.
  2. Alte Datenbank löschen.
  3. Neue Datenbank aus Assets kopieren.
  4. Ändern der Benutzerversion der neuen Datenbank.
  5. Überprüfen neue user_version was in meinem Fall ist 1.

Aber wenn ich die Anwendung user_version geändert wieder auf 0 Neustart Warum ist sie nicht die „1“ als neue user_version zu speichern? Oder ich muss user_version der neuen Datenbank vor dem Kompilieren der App ändern.

Hier ist mein Code.

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(); 
      } 

bearbeiten

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(); 
       } 
} 

Antwort

0

Wenn Sie über die Inhalte der alten Datenbank nicht kümmern, dann versuchen Sie sollten es nicht einmal zu aktualisieren. Geben Sie Ihrer neuen Datenbankversion einen neuen Dateinamen, damit dieser einfach kopiert werden kann (verwenden Sie SQLiteAssetHelper), und löschen Sie die alte Datei.

+0

Vielen Dank, um mich mit SQLiteAssetHelper einzuführen. Aber manchmal muss ich einige Datensätze aus der alten Datenbank abrufen. Das Seltsame für mich ist die automatische Umkehrung von user_version. Kannst du mir sagen, warum es passiert? – user934820

+1

Wie man alte Daten behält, wäre [eine andere Frage] (http://stackoverflow.com/q/37094656/11654). Wie auch immer, das Unveränderte sieht wie ein Fehler irgendwo anders in deinem Code aus. –

+0

Wenn ich Benutzerversion der neuen Datenbank vor dem Kompilieren der App ändern und entfernen Sie db.execSQL ("PRAGMA user_version = 1") ;. Wäre es ok? – user934820

Verwandte Themen