queryForAll使用ORMLite Android

时间:2016-09-24 11:37:31

标签: android sqlite ormlite

我正在尝试在Android SQLite数据库上创建和获取一些数据。

当我使用 create 方法添加数据时,对象会正确更新(设置了长ID)。但是,当我使用 queryAll 方法获取数据时,除了id属性(null)之外,正确返回了对象。 我正在使用 DatabaseField 标记, generatedId 属性设置为true,就像文档说的那样:

  

generatedId

     

Boolean该字段是否为自动生成的id字段。默认是   假。只有一个字段可以在类中设置此集合。这说明了   数据库为插入的每一行自动生成相应的id。   使用Dao.create()创建具有generated-id的对象时   方法,数据库将为该行生成一个id   通过create方法返回并在对象中设置。一些数据库   需要生成id的序列,在这种情况下需要序列名称   将自动生成。指定序列的名称使用   generatedIdSequence。只有其中一个,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为null。

任何想法?我已经尝试在创建之后调用提交,但没有任何更改。

2 个答案:

答案 0 :(得分:1)

我有同样的问题。我认为这与答案有关:https://stackoverflow.com/a/34909528

清除应用程序数据有效,但是您不能要求用户;)

  

SQLite具有有限的ALTER TABLE支持,可用于将列添加到表的末尾或更改表的名称。如果要对表的结构进行更复杂的更改,则必须重新创建表。您可以将现有数据保存到临时表中,删除旧表,创建新表,然后将数据从临时表中复制回去。

答案 1 :(得分:0)

终于开始工作了。客人什么?只需清除数据并卸载应用程序即可开始使用。不要问我到底为什么,但它必须与id注释有关。起初我正在使用:

@DatabaseField(id = true, allowGeneratedIdInsert = true, columnName = "language_id")

发出错误,然后我改为另一种组合,并且在中间的某个地方必须使用某些属性创建数据库。然后,我将其更改为我的问题中显示的配置,但是我没有按照我的解释工作。在我的手机上清理应用程序之后,必须从头开始创建所有内容,最终创建的数据库具有正确的属性。

因此,如果将来您的数据库没有正确存储或加载数据,只需清除并取消安装该应用程序。