gpt4 book ai didi

android - 如何在原始查询中正确定义 SelectArg?

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:39:37 25 4
gpt4 key购买 nike

我需要在查询的 WHERE 条件中实现一个 CASE。我写了下面的代码:

QueryBuilder<Cars, String> carsQB = carsDao.queryBuilder();
carsQB.selectColumns("id");
carsQB.join(modelsDao.queryBuilder());

carsQB.where().raw("CASE WHEN future = true THEN date > ? ELSE endDate > ? END",
new SelectArg("date"), new SelectArg("endDate"));

但是我得到以下错误:

E/AndroidRuntime(4599): Caused by: java.lang.IllegalArgumentException:
Either the column name or SqlType must be set on each argument

date 和 endDate 都是我数据库中的 Date 列。

我错过了什么?有没有更好的方法来完成这个?谢谢!

最佳答案

问题是(不幸的是)调用 new SelectArg(String) 会调用 SelectArg(Object) constructor它设置 而不是列名。您应该将参数定义为:

new SelectArg("date", null);

回溯,javadocs for Where.raw()状态:

args - Optional arguments that correspond to any ? specified in the rawStatement. Each of the arguments must have either the corresponding columnName or the sql-type set.

您也可以使用 SqlType 构造函数。我改进了 SelectArg 文档中的 Javadocs 来帮助解决这个问题。参见 this change on github .

另外,正如我提到的,我认为你想做类似的事情:

SelectArg dateArg = new SelectArg("date", null);
SelectArg endDateArg = new SelectArg("endDate", null);
carsQB.where().raw("CASE WHEN future = true THEN date > ? ELSE endDate > ? END",
dateArg, endDateArg);
...
dateArg.setValue(...);
endDateArg.setValue(...);

关于android - 如何在原始查询中正确定义 SelectArg?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15411872/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com