【发布时间】:2016-09-24 11:37:31
【问题描述】:
我正在尝试在 Android SQLite 数据库上创建和获取一些数据。
当我使用 create 方法添加数据时,对象会正确更新(设置了 Long id)。但是,当我使用 queryAll 方法获取数据时,对象被正确返回,除了 id 属性为空。 我正在使用 DatabaseField 标记并将 generatedId 属性设置为 true,就像文档说的那样:
生成的Id
该字段是否为自动生成的 id 字段的布尔值。默认为 错误的。一个类中只有一个字段可以有此设置。这告诉 数据库为插入的每一行自动生成相应的 id。 当一个具有生成 ID 的对象使用 Dao.create() 创建时 方法,数据库将为该行生成一个ID 通过 create 方法返回并设置在对象中。一些数据库 需要生成的 id 的序列,在这种情况下,序列名称 将自动生成。要指定序列的名称,请使用 生成的IdSequence。只有这个、id 和 generatedIdSequence 之一可以 被指定。请参阅具有 generatedId 的字段部分。
这是我的课:
@DatabaseTable(tableName = "LANGUAGE")
public class Language {
@DatabaseField(generatedId = true, columnName = "language_id")
private Long id;
@DatabaseField(columnName = "language_locale")
private String locale;
@DatabaseField(columnName = "language_active")
private boolean active;
@DatabaseField(columnName = "language_name")
private String name;
// getters and setters...
}
我正在插入这样的数据:
Language pt = new Language();
pt.setActive(true);
pt.setName("Português");
pt.setLocale("pt_PT");
dao.create(pt);
Language en = new Language();
en.setActive(true);
en.setName("English");
en.setLocale("en_EN");
dao.create(en);
// here, both pt and en have an id, 1 and 2, respectively
但是当我执行时
dao.queryForAll()
locale、active 和 name 属性都可以,但 id 为空。
有什么想法吗?我已经尝试在 create 之后调用 commit,但没有任何变化。
【问题讨论】:
-
你确定你的数据库配置文件已经完全更新了吗?我从未见过或听说过这一点,尤其是 id 字段。
dao.queryForId(...)工作但也不填写 id 吗? -
queryForId(例如传递 id 1)返回 null。这很奇怪,似乎create方法可以完成这项工作,但是数据库存储了没有id的实体......根据我的经验,我一定有一些小错误,只能通过try-error找到它......任何帮助都是赞赏
-
并且ids是通过create方法正确/按顺序分配的,所以看起来实体实际上在数据库上。你认为这可能是一些缓存问题吗?
-
这似乎查询过程不知道 id 文件。您有过期的
ormlite_config.txt文件吗? -
老实说,我的 android 项目中没有任何 ormlite_config.txt。我已经添加了依赖项,创建了实体和 db 助手并且它可以工作(除了这个 id 问题)。我应该创建一个吗?