我使用迭代器来查看Entry对象列表。它通过迭代器,初始化一个preparedStatement对象并将该对象添加到批处理中。当批次达到特定大小时,它会执行批处理并再次执行操作。
这是我的代码的一部分:
for (Fields field : fieldList)
{
if(field != null)
{
if (countField < batchLimit)//check if the batch size limit is reached
{
//more items can be added to batch
Iterator<Entry<String, List<String>>> i = field.getParameters();
if (i != null)
{
while (i.hasNext())
{
Entry<String, List<String>> e = i.next();
for (String str : (List<String>) e.getValue())
{
psField.setString(1, field.getField1());
psField.setString(2, field.getField2());
psField.setString(3, str);
psField.addBatch();//add record to batch
psFieldTemp.addBatch();
countField++;
}
}
}
}
else
{
//records in batch will be executed to Database
psField.executeBatch();
psFieldTemp.executeBatch();
countField = 0;
//empty the batch
psField.clearBatch();
psFieldTemp.clearBatch();
}
}
}
我的问题是:每当迭代器有两个不同的条目具有field.getParameters()
的相同值时,代码就不会从这一行开始:
while(i.hasnext())
例如,如果从迭代器中的两个不同条目获取的值类似于"language=java"
,则对于第一个条目,代码在条件下传递,但对于第二个条目则不在。
我使用Map修复了问题,但我想知道为什么会这样。