Mar*_*zzi 4 android case where ormlite
我需要在查询的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"));
Run Code Online (Sandbox Code Playgroud)
但是我收到以下错误:
E/AndroidRuntime(4599): Caused by: java.lang.IllegalArgumentException:
Either the column name or SqlType must be set on each argument
Run Code Online (Sandbox Code Playgroud)
date和endDate都是我数据库中的Date列.
我错过了什么?有没有更好的方法来实现这一目标?谢谢!
问题是(不幸的是)调用new SelectArg(String)调用SelectArg(Object) constructor设置值而不是列名的调用.您应该将参数定义为:
new SelectArg("date", null);
Run Code Online (Sandbox Code Playgroud)
要回溯,状态的javadocWhere.raw():
args - 对应任何参数的可选参数?在rawStatement中指定.每个参数必须具有相应的columnName或sql-type集.
您也可以使用SqlType构造函数.我已经改进了文档中的Javadocs SelectArg以帮助解决这个问题.在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(...);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
899 次 |
| 最近记录: |