如何批量阅读List

时间:2011-11-02 18:28:42

标签: java jdbc prepared-statement

我有一个读取通知列表对象的函数。现在我必须以批量100(假设)读取Notifications对象并更新它。

public boolean addBSInfoToTemp(List<ParentNotification> pNotify)
  throws DaoException, BatchUpdateException {

int cnt = 0;

final String query = "insert into Temp values ?,?,?,'Y','N',?,?,?,?";

  while (!pNotify.isEmpty()) {
  try {
    pst = getConnection().prepareStatement(query);
    for (ParentNotification pn : pNotify) {
      cnt++;
      pst.setInt(1, pn.getUserId());
      pst.setString(2, pn.getEmail());
      pst.setString(3, pn.getNotificationType());

      Date createdDate = (Date) pn.getCreatedDate();
      pst.setDate(4, createdDate);

      pst.setString(5, pn.getCreatedBy());

      Date icsesCreatedDate = (Date) pn.getIcsesCreatedDate();
      pst.setDate(6, icsesCreatedDate);

      pst.setString(7, pn.getMiscellaneous());

      pst.addBatch();
      if(cnt==batchCount){
        break;
      }
    }

    int[] batch = pst.executeBatch();
    if (batch.length != 0) {
      flag = true;
    }
  } catch (BatchUpdateException b) {
    flag = false;
  } catch (SQLException sqlx) {
    flag = false;        
  } finally {
    close(pst, null);
  }
}
return flag;

}

我要做的是用batchCount = 100读取List然后更新并返回101记录,然后更新另外100条记录,直到List为空。

1 个答案:

答案 0 :(得分:0)

你有这个:

while(!pNotify.isEmpty()){

但是我没有看到你从列表中删除对象,所以你有无限循环。我只是让外部循环遍历所有这些元素:

for (int i=0; i<=pNotify.size(); i++){

// and inside check if it is devisible by batch length 

      if(i % batchCount == 0){
        break;
      }

}