Java 在ormlite Having子句中使用SelectArg?

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

我需要在查询生成器的having子句中为我们提供一个占位符。 我试着用“?”标记,但后来我得到:
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)");