我对一个我不完全理解的迭代器有一个奇怪的问题。迭代器正在loggedPreparedStatement 中使用,但时不时地(大约200 个中的20 个)抛出此错误:
SQLException in executeQuery, errorcode: 0, SQL state: 07001, message: No value specified for parameter 1
while executing statement: com.mysql.jdbc.PreparedStatement@11fffa73: SELECT ac.id as i FROM ac LEFT JOIN pa ON pa.id = ac.adspace_id WHERE pa.adspace_id IN (** NOT SPECIFIED **)
这就是我创建迭代器的方式:
private Iterator< Integer > adspacesId = null;
public ArrayList<Integer> getIds(int inAdspaceId) {
if (inAdspaceId <= 0) return new ArrayList<Integer>();
ArrayList<Integer> tempList = new ArrayList<Integer>();
tempList.add(new Integer(inAdspaceId));
adspacesId = tempList.listIterator();
num = tempList.size();
activeOnly = false;
if (adspacesId != null && adspacesId.hasNext() && num > 0) {
executeQuery();
}
return result;
}
因此,我将一个 int 添加到一个临时数组列表中,然后将其转换为一个迭代器,然后在我的查询中使用该迭代器,如下所示:
LoggedPreparedStatement statement = new LoggedPreparedStatement(theQuery.toString());
statement.setInt(1, adspacesId);
所以我的第一个猜测是,我的迭代器中没有条目,但是它如何通过 adspacesId.hasNext() 的检查呢?
num 的值为 1,因此临时列表中有一个条目,我会假设在我的迭代器中。
欢迎小帮助:)