1

以前のアプリ リリースでは、次のようなテーブルを作成しました。

public static final String CREATE_DATABASE = "CREATE TABLE " + TABLE_NAME
        + "(_id INTEGER PRIMARY KEY AUTOINCREMENT," + COLUMN_NAME_TITLE + " TEXT, "
        + COLUMN_NAME_LOGIN + " TEXT, " + COLUMN_NAME_PASSWORD + " TEXT, " + COLUMN_NAME_NOTES
        + " TEXT);";

現在のバージョンでは、次のように作成されたテーブルがあります。

public static final String CREATE_DATABASE = "CREATE VIRTUAL TABLE " + TABLE_NAME + " USING fts3 "
        + "(_id INTEGER PRIMARY KEY AUTOINCREMENT," + COLUMN_NAME_TITLE + " TEXT, "
        + COLUMN_NAME_LOGIN + " TEXT, " + COLUMN_NAME_PASSWORD + " TEXT, " + COLUMN_NAME_NOTES
        + " TEXT, " + COLUMN_NAME_FAV + " INTEGER DEFAULT 0, " + KEY_WORD + ");";

これで、 と の 2 つの新しい列が作成され、追加されましVIRTUALた。USING fts3COLUMN_NAME_FAVKEY_WORD

アップグレード時に何らかの方法でテーブルを変更することは可能ですか? そうでない場合、ユーザーがデータを失わないようにするにはどうすればよいですか?

4

2 に答える 2

1

通常のテーブルをテーブルに変換する単純な変更コマンドを実行することはできませんVIRTUAL

その代わりに、次のことを行う必要があります。

  1. テーブルからメモリにデータをロード/テーブルをコピーします。
  2. DROP古いテーブル。
  3. CREATE新しいテーブル。
  4. 手順 1 のデータを新しいテーブルに入力します。
于 2012-09-04T22:57:46.617 に答える
0

通常、新しい列を既存のテーブルに追加しても、それらが null 可能であるか、デフォルト値を持つ限り安全です。既存のテーブルのコピーを作成し、それを変更 (コピー) して、何が起こるかを確認してみませんか。
PS DBの実行中にテーブルを変更できるようにするには、いくつかのDBフラグを設定する必要がある場合があります。

于 2012-09-04T22:47:40.180 に答える