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

onUpgradeは新しいデータベースを作成しません。これは、新しい列またはテーブルを作成する機会、またはデータベース内のデータを何らかの方法で更新して新しいバージョンと互換性を持たせる機会を提供するだけです。

したがって、データを新しいデータベースにコピーする必要はありません。

于 2012-06-05T23:43:02.483 に答える
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 に答える