2012-06-05 35 views
0

歡迎光臨!
數據庫以這種方式更新:正在更新中,我們正在努力修改此內容。

public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
    if (newVersion > oldVersion) { 
     Log.e("TAG", "New database version exists for upgrade."); 

     try { 
      Log.e("TAG", "Copying database..."); 
      copyDataBase(); 
     } catch (IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
    } 

} 

的問題是,我有一個表統計的數據庫,我想爲了在這個表中的數據複製到新的數據庫。

我該怎麼辦?請求一個例子。

對我可憐的英語感到遺憾和遺憾。


我試着這樣做:

@Override 
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
    if (newVersion > oldVersion) { 
     Log.e("TAG", "New database version exists for upgrade."); 

     db.beginTransaction(); 
     try { 
      Log.e("TAG", "Copying database..."); 
      this.getReadableDatabase(); 
      ArrayList<Statystyka> statystyki = getAllStatistic(); 
      copyDataBase(); 
      for (int i = 0; statystyki.size() >= i; i++) { 
       addStat(statystyki.get(i).getId_pytania(), 
         statystyki.get(i).getIlosc_rozwiazan(), statystyki 
           .get(i).getIlosc_poprawnych(), statystyki 
           .get(i).getIlosc_blednych()); 
      } 
      db.setTransactionSuccessful(); 
     } catch (IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
     db.endTransaction(); 
    } 

} 

但我得到的錯誤:

java.lang.IllegalStateException:getReadableDatabase遞歸調用

如何打開數據庫加載數據?

回答

0

數據庫升級後,舊錶仍然存在,您只需更改爲新的模式版本即可。請參閱this documentation

用於例如::
說你有一個新列添加到您的表::

String alter_table_command=" ALTER TABLE " + TABLE_NAME + " ADD COLUMN " + NEW_COLUMN + " TEXT; "; 
db.execSQL(alter_table_command); 

閱讀有關ALTER TABLE here

注意::如果您想從其他數據庫複製表格,請使用上面@vipul建議的解決方案。

+0

我已經知道如何添加新列,現在將新表填充爲舊數據? – kurdak

0

onUpgrade不會創建新的數據庫。它只是讓您有機會創建新的列或表格,或以某種方式更新數據庫中的數據以使其與新版本兼容。

因此,您不需要將任何數據複製到新的數據庫中。

相關問題