Java 在ormlite Having子句中使用SelectArg?
我需要在查询生成器的having子句中为我们提供一个占位符。 我试着用“?”标记,但后来我得到:Java 在ormlite Having子句中使用SelectArg?,java,android,sql,ormlite,query-builder,Java,Android,Sql,Ormlite,Query Builder,我需要在查询生成器的having子句中为我们提供一个占位符。 我试着用“?”标记,但后来我得到: java.sql.SQLException:参数持有者索引1无效,语句中只有1 这是我努力实现的目标: QueryBuilder<ArchiefTag, Integer> archiefTagQb = helper .getArchiefTagDao().queryBuilder(); tagSelectArg = new SelectArg(); archiefT
java.sql.SQLException:参数持有者索引1无效,语句中只有1
这是我努力实现的目标:
QueryBuilder<ArchiefTag, Integer> archiefTagQb = helper
.getArchiefTagDao().queryBuilder();
tagSelectArg = new SelectArg();
archiefTagQb.where().in(ArchiefTag.TAG_FIELD, tagSelectArg);
archiefTagQb.groupBy(ArchiefTag.ARCHIEF_ENTRY_FIELD);
QueryBuilder<ArchiefEntry, Date> archiefEntryQb = helper
.getArchiefEntryDao().queryBuilder();
archiefEntryQb.join(archiefTagQb);
//the having must be on the outer join query. Don't know why
archiefEntryQb.having(String.format("COUNT(%s) = ?",ArchiefTag.TAG_FIELD));
preparedGetArchiefForTags = archiefEntryQb.prepare();
但当我打电话时:
preparedGetAchiefortags.setArgumentHolderValue(1,3)代码>
出现上述异常
有什么办法解决这个问题吗
但是当我调用时:preparedgetachiefortags.setArgumentHolderValue(1,3);上述例外情况
如果查看,则index
参数应该是基于0的,而不是像SQL那样基于1的
引述:
索引-要设置的持有者的索引,以0为基础。见上文注
因此,您的代码应该是:
preparedGetArchiefForTags.setArgumentHolderValue(0, 3);
我对异常进行了调整,使其更加简单
throw new SQLException("argument holder index " + index + " is not valid, only "
+ argHolders.length + " in statement (index starts at 0)");
仍然得到一个异常java.sql.SQLException:参数持有者索引0无效,在语句中只有0
您过去在语句中有1,所以我认为您的查询一定已更改@Vrolijkxnope语句没有更改,但我现在看到,我忘记了生成的sql中的一部分。但是我使用executeRaw()解决了这个问题
throw new SQLException("argument holder index " + index + " is not valid, only "
+ argHolders.length + " in statement (index starts at 0)");