0

プロジェクト「ActiveAndroid」で使用しています。私は保持しているモデルを持っています。ここにモデルがあります:

@Table(name="Params")
public class Params extends Model {

    public Params() {
        super();
    }

    @Expose
    @Column(name="height")
    @SerializedName("heigth")
    public int heigth;

    @Expose
    @Column(name="weight")
    @SerializedName("weight")
    public int weight;
}

ここですべて保存します:

public void success(User user, Response response) {
               user.params.save();
               user.save();
                ActiveAndroid.clearCache();
            }

すべてがうまくいきます!しかし、モデルに別のフィールドを追加したい場合:

@Expose
    @Column(name="strong")
    @SerializedName("strong")
    public int strong;

エラーが発生します:

android.database.sqlite.SQLiteException: table Params has no column named strong (code 1): , while compiling: INSERT INTO Params(Id,weight,height,strong) VALUES (?,?,?,?)

もちろん、このエラーの理由はわかっています。テーブルはそのような列ではないためです。それが問題です、この列を追加する方法???

私が試した今:

  1. プログラムを完全に削除し、再びコンパイルして実行すると、すべて正常に動作します! この列から新しいテーブルを作成するためです。

  2. マニフェスト データベースのバージョンを変更しようとしましたが、成功しませんでした。

アップグレードの方法でデータベースを通常に使用すると、データベースのバージョンを変更してテーブルを再構築できることを私は知っています。しかし、ORM「ActiveAndroid」でそれを行う方法は?

4

1 に答える 1

4

として知られているものがあります.Active Androidでは、このMigrationようにすることができます.

  1. モデルにフィールドを追加します(既に行っています)。

  2. AndroidManifest.xml のメタデータのデータベース バージョンを変更します。

  3. 移行スクリプトを作成します。スクリプトに名前を[newDatabaseVersion].sql付けて、ディレクトリに配置し[YourApp’sName]/app/src/main/assets/migrationsます。私の具体的な例では、ファイルを作成します[MyAppName]/app/src/main/assets/migrations/2.sql

例えばALTER TABLE Items ADD COLUMN Priority TEXT;

于 2015-01-27T11:31:37.303 に答える