Java:迭代器的奇怪问题

时间:2013-07-15 09:19:30

标签: java sql iterator

我对迭代器有一个奇怪的问题,我不完全理解。 迭代器在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中有一个条目,我会在迭代器中假设。

欢迎小帮助:)

1 个答案:

答案 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 界面而不只是迭代器这里..