欢迎。
数据库以这种方式更新:
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 :(得分: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上面的建议使用该解决方案。
答案 1 :(得分:0)
onUpgrade不会创建新数据库。它只是让您有机会创建新的列或表,或以某种方式更新数据库中的数据,使其与新版本兼容。
因此,您不需要将任何数据复制到新数据库中。