簡體   English   中英

iterator.next()返回備用對象

[英]iterator.next() returns alternate objects

我正在嘗試對Java中的多個記錄在迭代器內執行update HQL查詢。 但是當我執行時,它通過跳過下一條記錄僅更新備用記錄。 如果我只在日志中打印迭代器對象,而不執行更新查詢,它將打印所有對象。 那么,當我在Iterator中執行update時,為什么接下來要跳過對象呢?

我的代碼:

List<Integer> id = (List<Integer>) myList.list();//I've to update query for each id

for(Iterator < Integer > iter = id.iterator();iter.hasNext();){
           System.out.println("id: "+(Integer) iter.next());
           int ids =  (Integer) iter.next();
           Query query =session.createQuery("update MyTable set url =? where id=?);
           query.setParameter(0,url);
           query.setParameter(1,ids);
           query.executeUpdate();
    }

如果我在myList有4個元素,它將通過skippint 1st和3rd進行第二和第四更新。

如果您需要在同一循環迭代中多次訪問同一迭代器元素,則不應多次調用iter.next() ,因為每次調用都會使迭代器前進。 而是一次調用iter.next()並將結果存儲在變量中:

for(Iterator<Integer> iter = id.iterator(); iter.hasNext();) {
    Integer currentID = iter.next();
    System.out.println("id: "+ currentID); 
    Query query = session.createQuery("update MyTable set url =? where id=?);
    query.setParameter(0,url);
    query.setParameter(1,currentID);
    query.executeUpdate();
}

請用

List<Integer> ids = (List<Integer>) myList.list();
for (Integer id : ids) {
   Query query =session.createQuery("update MyTable set url =? where id=?);
   query.setParameter(0, url);
   query.setParameter(1, id);
   query.executeUpdate();
}

在使用Iterator時,最好使用while-loop

你應該試試:

List<Integer> ids = (List<Integer>) myList.list();
Iterator<Integer> iterator = ids.iterator();
while (iterator.hasNext()){
    Integer id = iterator.next();
    System.out.println("id in this iteration is : "+ id); 
    Query query = session.createQuery("update MyTable set url =? where    id=?);
    query.setParameter(0,url);
    query.setParameter(1,id);
    query.executeUpdate();
}

希望能幫助到你!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM