当前位置: 首页 > 知识库问答 >
问题:

queryForAll使用ORMLite Android返回空ID

阴高寒
2023-03-14

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

当我用create方法添加数据时,对象被正确更新(长id被设置)。但是,当我用queryAll方法获取数据时,除了id属性为null外,其他对象都被正确返回。我使用的DatabaseField标记的generatedId属性设置为true,正如文档所述:

生成ID

布尔值字段是否为自动生成的id字段。默认值为false。在一个类中,只有一个字段可以具有该集。这告诉数据库为插入的每一行自动生成相应的id。当使用Dao创建具有生成id的对象时。create()方法,数据库将为该行生成一个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.html" target="_blank">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。

有什么想法吗?我已经尝试在创建后调用commit,但没有任何更改。

共有2个答案

柴修筠
2023-03-14

终于成功了。客人什么?只需清除数据并卸载应用程序,您就可以开始了。不要问我确切的原因,但这一定与id注释有关。起初,我使用:

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

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

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

后化
2023-03-14

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

清除应用程序数据是可行的,但你不能向用户索要;)

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

 类似资料:
  • 我无法理解为什么findFragmentByTag()在我的代码中返回null。我已经在片段onCreate()上设置了RetainInstance(true),并且正在使用getSupportFragmentManager()。findFragmentByTag(),因为它是SherlockFragmentActivity。 这是我的活动代码: } 这是我的片段代码:

  • 下面是我的控制器代码:- 以下是我的服务代码:- 下面是我的存储库代码:-

  • 问题内容: 我想获取执行.py文件的当前目录的路径。 例如,一个带有代码的简单文件: 输出奇怪的是: 我期待从和获得相同的结果。 给定,为什么 返回空? 问题答案: 因为不成立。我们宁愿有 双方并只拆分通过文件名成组件,而不考虑当前目录。如果您还想考虑当前目录,则必须明确地考虑。 要获取绝对路径的目录名,请使用

  • 我尝试使用Firebase实时数据库进行登录活动。 我的数据库在注册时填写如下: 登录后,我想初始化一个公共静态用户,这样我就可以在我的主要活动中检索它并相应地更新用户界面,但是ValueEventListener的dataSnapshop返回null。 以下是我的addListenerForSingleValueEvent的代码: 任何人都有办法帮助我。或者有什么解决方法或建议可以做得更好? 编

  • 我的预览在方法中调用时返回null。测试类确实扩展了,因为它被保存在

  • 因此,我得到了一个字符串,它是我在一个类上实现的toJson方法的结果,并且在我的测试代码中确认它是我的类的正确Json表示。我的目标是使用Gson将此字符串转换为JsonObject并将其传递给构造函数。然而,我遇到了一个奇怪的问题。 这是我要调用的代码: 我以前在我的项目中的许多地方,在其他类中,都使用过完全相同的代码片段,而且效果很好。我甚至将其中一段功能代码复制到这个测试类中,并进行了尝试