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

哪个返回不能查询 id 因为 ForeignData 没有 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 应用程序运行以生成配置文件。每次对一个模型文件进行与 ORM 相关的更改时都需要执行此操作,因为它使用此文件作为模型的真实来源(它不会在运行时检查模型文件的注释)。

于 2011-12-14T07:04:50.820 回答
-2

尝试从设备上卸载该应用程序,然后再次运行它......它可以工作......

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

于 2011-10-06T08:48:20.720 回答