0

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

欢迎小帮助:)

4

1 回答 1

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接口而不是Iterator这里..

于 2013-07-15T09:32:08.330 回答