1

SQLiteOpenHelper で onUpgrade を使用すると、テーブルを変更でき、デフォルト値を持つ新しい列名が追加されます。

しかし、アクティビティ内の特定のテーブルにアクセスすると、古い列数のみが表示されます。変更により、4 (列数) が表示されるはずですが、3 のみが表示されます。

onUpgrade メソッド内の私のコード:

 db.execSQL("ALTER TABLE " + MyTableDaoDao.TABLENAME + " ADD COLUMN 'VRESION_NO' INTEGER NOT NULL DEFAULT '11';");

//同じ列名を使用して再度変更しようとすると、重複する列名のsqlite例外が表示されるため、テーブルが変更されていると確信しています。

すべての列数を取得するには:

 daoSession.getMyTableDao().getAllColumns().length  // returns old table count

GreenDAO で更新されたテーブルの詳細を取得するにはどうすればよいですか? この状況に遭遇した人はいますか?

前もって感謝します。

4

2 に答える 2

1

おそらく、更新されたスキーマから dao コードを再作成するのを忘れていたのでしょう。

Greendao は、データベースと Java の間のマッピングを作成するために、リフレクションを使用したり、データベースをスキャンしたりしません。このマッピングは dao-generator によって作成されます。したがって、データベース スキーマを更新する場合は、次の 2 つのタスクがあります。

  1. 新しいスキーマでエンティティ クラスとダオスを再作成して更新し、スキーマ バージョンを増やします。
  2. アプリで更新戦略を実装します。つまり、すべてのテーブルを削除して再作成するか、以前にアクティブだったスキーマバージョン以降に変更された列/テーブル/インデックス/を追加/変更/削除します(ここここで私の回答を参照してください) )。
于 2015-11-27T23:12:54.430 に答える