ORMLite不能做queryForId

时间:2011-10-06 00:13:50

标签: android ormlite

我是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());

返回不能查询for-id,因为ForeignData没有id列。

如果我将ForeignData类中的id更改为

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

我得到的异常是“来自数据库字段的queryForOne:SELECT * FROM'OffialData'WHERE'id'=?”

3 个答案:

答案 0 :(得分:2)

您可以将ForeignData类中的id更改为:

@DatabaseField(id = true)
private Integer id;

答案 1 :(得分:0)

另一种可能性(对于遇到同样问题的其他用户)。

OrmLite让您以“配置文件模式”运行以提高性能。要检查您是否使用此模式,请查看您的OrmLiteSqliteOpenHelper类,并查看要调用的超级构造函数的版本。如果你给它一个configFileId,那么你就处于这种模式。

假设是这种情况,请确保将OrmLiteConfigUtil类作为Java应用程序运行以生成配置文件。每当您对其中一个模型文件进行与ORM相关的更改时,您都需要这样做,因为它使用此文件作为模型的真实来源(它不会在运行时检查模型文件中的注释)。 p>

答案 2 :(得分:-2)

尝试从设备卸载应用,然后再次运行...它可以正常运行....

我认为我的databaseHelper上的onUpgrade函数有问题,所以这个问题可能没那么相关......