我是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'=?”
答案 0 :(得分:2)
您可以将ForeignData类中的id更改为:
@DatabaseField(id = true)
private Integer id;
答案 1 :(得分:0)
另一种可能性(对于遇到同样问题的其他用户)。
OrmLite让您以“配置文件模式”运行以提高性能。要检查您是否使用此模式,请查看您的OrmLiteSqliteOpenHelper类,并查看要调用的超级构造函数的版本。如果你给它一个configFileId,那么你就处于这种模式。
假设是这种情况,请确保将OrmLiteConfigUtil类作为Java应用程序运行以生成配置文件。每当您对其中一个模型文件进行与ORM相关的更改时,您都需要这样做,因为它使用此文件作为模型的真实来源(它不会在运行时检查模型文件中的注释)。 p>
答案 2 :(得分:-2)
尝试从设备卸载应用,然后再次运行...它可以正常运行....
我认为我的databaseHelper上的onUpgrade函数有问题,所以这个问题可能没那么相关......