Ormlite:为什么where.eq(columnname,value)会给出错误的结果?

时间:2017-01-01 17:15:11

标签: android android-sqlite ormlite

所以我使用ormlite来处理android中的sqlite数据库。不幸的是,我使用dao.queryBuilder()。where()。eq()。queryFirst()得到了意想不到的结果。 这是我的功能:

public static Person getByEmail(Dao<Person, ?> dao, String email) {
    try {
        Log.e("queriedEmail", email);
        return dao.queryBuilder().where()
                .eq(Person.EMAIL_FIELD, email)
                .queryForFirst();
    } catch (SQLException e) {
        throw new RuntimeException(e);
    }
}

我实际上检查了传递的电子邮件和我得到的人物对象。两者都有完全不同的电子邮件。

上述功能由

调用
public static Person getByEmail(MyApp app, String email) {
    try {
        return getByEmail(app.getDatabaseHelper().getDao(
                Person.class), email);
    } catch (SQLException e) {
        e.printStackTrace();
    }
    return null;
}
如果有人可以指出我哪里出错了,那真是太棒了。谢谢!

2 个答案:

答案 0 :(得分:0)

好吧,我得到了一个解决方案。 queryBuilder实际上给出了错误的结果,因此我使用了ormlite queryRaw而不是queryBuilder。

答案 1 :(得分:0)

  

所以我使用ormlite来处理android中的sqlite数据库。不幸的是,我使用dao.queryBuilder()。where()。eq()。queryFirst()得到了意想不到的结果。

您似乎暗示QueryBuilder由于某种错误而无法正常工作。这并非不可能,但你更有可能错误地使用它。我会使用调试器来弄清楚发生了什么。要查看正在生成的查询类型,您还可以启用ORMLite's Android logs

有些事情需要研究:

  • 确保您的Person.EMAIL_FIELD符合您的期望。
  • 看起来您正在打印email,以便该字段可以正常,但null值可能也是问题。

祝你好运调试错误。