2012-06-05 36 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不会创建新的数据库。它只是让您有机会创建新的列或表格,或以某种方式更新数据库中的数据以使其与新版本兼容。

因此,您不需要将任何数据复制到新的数据库中。

相关问题