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

如何打开数据库来加载数据?

4

2 回答 2

0

升级数据库后,旧表仍然存在,您只需更改为新的架构版本。请参阅此文档

例如::
说你必须在你的表中添加一个新列::

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

在此处阅读有关 ALTER TABLE的信息。

注意::如果您想从另一个数据库复制表,请使用上面@vipul 建议的解决方案。

于 2012-06-05T12:37:57.193 回答
0

onUpgrade 不会创建新数据库。它只是让您有机会创建新的列或表,或者以某种方式更新数据库中的数据以使其与新版本兼容。

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

于 2012-06-05T23:43:02.483 回答