3

私はAndroidとormLiteが初めてで、データを保存して、queryForIdを使用して再度取得しようとしています。最初はうまくいきましたが、少しいじった後、どういうわけか...クラスにidフィールドがないという例外が発生しました。

ここにクラスのコードがあります

@DatabaseTable(tableName="ForeignData")
public class ForeignData implements Serializable {

  private static final long serialVersionUID = 3640428963380696279L;

  @DatabaseFieldId(generatedId = true)
  private Integer id;

  @DatabaseFieldSimple(defaultValue = "")
  private String name;

  public ForeignData(){};
}

そして、これは私がそれを呼ぶ方法です...

ForeignData f = new ForeignData();
try {
    Dao<ForeignData, Integer> fdao = new DatabaseHelper(getApplicationContext()).getForeignDao();
    f.setName("test");
    fdao.create(f);
    f = fdao.queryForId(f.getId())==null?f:fdao.queryForId(f.getId());
    txt1.setText(f.getName());                  
} catch (SQLException e) {
    txt1.setText(e.getMessage());
}

そしてそれはで例外をキャッチします

f = fdao.queryForId(f.getId())==null?f:fdao.queryForId(f.getId());

ForeignData には id 列がないため、id をクエリできません。

そして、ForeignDataクラスのIDを次のように変更すると

 @DatabaseField(generatedId=true,columnName="id")
 private Integer id;

私が得る例外は、「データベースフィールドからのqueryForOne: SELECT * FROM 'ForeignData' WHERE 'id'=?」です。

4

3 に答える 3

2

ForeignData クラスの id を次のように変更できます。

@DatabaseField(id = true)
private Integer id;
于 2012-06-19T15:39:13.347 に答える
0

別の可能性 (同じ問題を抱えている他のユーザー向け)。

OrmLite では、「構成ファイル モード」で実行して、パフォーマンスを向上させることができます。このモードを使用しているかどうかを確認するには、OrmLiteSqliteOpenHelper クラスを見て、呼び出しているスーパー コンストラクターのバージョンを確認します。configFileId を指定している場合は、このモードになります。

その場合は、OrmLiteConfigUtil クラスを Java アプリケーションとして実行して、構成ファイルを生成するようにしてください。モデル ファイルの 1 つに ORM 関連の変更を加えるたびに、これを行う必要があります。これは、このファイルをモデルの信頼できるソースとして使用するためです (実行時にモデル ファイルの注釈を検査しません)。

于 2011-12-14T07:04:50.820 に答える
-2

デバイスからアプリをアンインストールして、もう一度実行してみてください...動作します...。

databaseHelperのonUpgrade関数に問題があると思うので、質問はもう関係ないかもしれません...

于 2011-10-06T08:48:20.720 に答える