我希望传递一组ID以获取与这些ID匹配的实体列表。这似乎不起作用:
public static List<Program> getByIds(Collection<Integer> ids) {
return new Select().from(Program.class)
.where("programId in (?)", ids)
.execute();
}
当我知道我在集合中有两个ID时,也不是这样:
public static List<Program> getByIds(Collection<Integer> ids) {
return new Select().from(Program.class)
.where("programId in (?,?)", ids)
.execute();
}
我什么都没回来。没有错误。程序实体确实存在,因为我已经完成了选择没有位置并打印了退回的项目&#39; IDS。
必须将整数ID转换为字符串,然后转换为连接字符串以便在where子句中使用,这似乎是重新发明轮子。当然,还有更好的方法吗?
答案 0 :(得分:1)
呃,这就是我所拥有的,但似乎很奇怪每个想要使用ActiveAndroid的人都必须这样做才能使用'in':
public static List<Program> getByIds(Collection<Integer> ids) {
return new Select().from(Program.class)
.where("programId in " + DAOUtil.makePlaceholders(ids.size()),
ids.toArray(new Integer[ids.size()]))
.execute();
}
可以找到makePlaceholders:
答案 1 :(得分:0)
尝试给它一个数组而不是一个集合,因为在ActiveAndroid的源代码中,它需要一个对象数组
in where()
public From where(String clause, Object... args) {
where(clause).addArguments(args);
return this;
}
深入了解......
void addArguments(Object[] args) {
for(Object arg : args) {
if (arg.getClass() == boolean.class || arg.getClass() == Boolean.class) {
arg = (arg.equals(true) ? 1 : 0);
}
mArguments.add(arg);
}
}
这应该有希望解决你的问题