我对迭代器有一个奇怪的问题,我不完全理解。 迭代器在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添加到temp arrayList然后将其转换为Iterator,然后在我的查询中使用该迭代器,如下所示:
LoggedPreparedStatement statement = new LoggedPreparedStatement(theQuery.toString());
statement.setInt(1, adspacesId);
所以我的第一个猜测是,我的迭代器中没有条目,但它如何通过adspacesId.hasNext()的检查呢?
num的值是1,所以templist中有一个条目,我会在迭代器中假设。
欢迎小帮助:)
答案 0 :(得分:0)
ArrayList<Integer> list = new ArrayList<Integer>();
list.add(1);
list.add(2);
list.add(3);
Iterator<Integer> it = list.listIterator();
System.out.println("First Element : " + it.next());
我猜您必须调用 next()才能获得第一个元素。我不认为你在这里做过。如果它是 PreparedStatement ,我在执行 executeQuery()之前没有看到你添加参数的位置,我建议你使用 ListIterator 强>界面而不只是迭代器这里..