0

ORMliteで定義されたデータベースの主キーを変更する方法はありますか?

私はクラスUserを持っています

@DatabaseField(columnName = NAME_FIELD_NAME, canBeNull = false, id = true)
private String name = "";

そして私はそれをクエリしますDAO.querybyid(String name);

しかし、データベース内の名前を変更しようとしても、警告は表示されません。ORMLiteはテーブルの列を変更してインデックスを削除してから、列を更新してインデックスを再度配置しますか?

私はそうは思いませんか?したがって、回避策が必要です:(だけでなく、DAO.querybyid()の利点を利用してユーザーを文字列で取得する必要があります。

誰かが私を助けることができますか?

4

1 に答える 1

1

ORMLiteはテーブルの列を変更してインデックスを削除してから、列を更新してインデックスを再度配置しますか?

dao.rawExecute(...)メソッドを使用してスキーマを変更していると思いますか? ORMLiteは、このステートメントに対して魔法のようなことは何もしません。基になるデータベースに送信するだけです。したがって、フィールドを要求しているnameが、名前が変更されているid場合、DAOはデータベースに対応していないため、機能しません。を実行し"SELECT name, ... FROM ..."、SQLエラーを取得します。

あなたができることは、クラスの2つの異なるバージョンを持つことです。最初のものには「古い」フィールド名が付いており、新しいものには「新しい」名前が付いています。次に、スキーマを更新する必要があることを検出した場合は、生のALTERSQLステートメントを発行してから、クラスの新しいバージョンに対応するDAOの使用を開始できます。

于 2013-01-19T21:06:50.647 に答える