7

読んで助けてくれてありがとう:)

私は ActiveAndroid 3.0 - Android 2.2 を使用しています - 私のアプリには「ユーザー」と呼ばれるモデルがあります。最初は、(id、name、passcode) 列/属性を持つモデルのみを作成し、エミュレーターでアプリを実行しましたが、機能しました。

@Table(name = "user")
public class User extends Model {
  @Column (name = "name")  
  public String name;
  @Column (name = "pass_code")
  public String passCode;
}

次に、新しい列/属性 - profileImage を追加しました。エミュレーターでアプリを実行したところ、SQLite 列の profileImage が存在しないというエラーが発生しました。

@Table(name = "user")
public class User extends Model {
  @Column (name = "name")  
  public String name;
  @Column (name = "pass_code")
  public String passCode;
  @Column (name = "profile_image")
  public String profileImage;
}

ActiveAndroid db 名を変更し、マニフェスト ファイルの db バージョン プロパティを更新しようとしました。

<meta-data android:name="AA_DB_NAME" android:value="my_app.db" />
<meta-data android:name="AA_DB_VERSION" android:value="2" />

しかし、列が存在しないというエラーが表示され続けます。

ERROR   AndroidRuntime  Caused by: android.database.sqlite.SQLiteException: 
no such column: profile_image: , while compiling: SELECT * FROM user WHERE profile_image = ?

また、エミュレータからアプリをアンインストールし、エミュレータを再起動し、ActiveAndroid.cacheClear() を呼び出してみました。これまでのところ、これは機能しませんでした。

どんな助けでも本当に感謝しています。ありがとう。

4

2 に答える 2

22

userその音から、テーブルを新しいスキーマに移行するためのアップグレード スクリプトがありません。アップグレード スクリプトには基本的に、データベースの古い状態から新しい状態に移行する方法に関する指示が含まれています。profile_image特定のケースでは、既存のユーザー テーブルに新しい列 を追加する必要があることを SQLite に伝えたいと思うでしょう。

データベースをスキーマ 1 から 2 にアップグレードするには、AA_DB_VERSION値を に上げて2、アップグレード スクリプトに名前を付け2.sqlます。以下にファイルを保存しassets/migrations、次の内容を指定します。

ALTER TABLE user ADD profile_image TEXT;

SQLiteDatabaseスクリプトには、によって実行できる任意の SQL ステートメントのセットを含めることができますexecSQL(...)

Active Android を使用したスキーマ移行の詳細については、GitHub プロジェクト ページの wiki を参照してください

于 2013-06-30T01:14:54.000 に答える
1

を使用したデータベース移行のために、ラベル" TEXT" が " " に変更されましたVARCHARActiveAndroid

" " を除く他のすべての予約語が強調表示されましTEXTた。「 」を使用VARCHARしましたが、うまくいきました。

于 2017-02-19T20:36:27.483 に答える