Spring JdbcTemplate batchUpdate与地图并返回,如果该银行帐户详细信息已更新?

时间:2018-07-26 18:37:50

标签: oracle spring-batch spring-jdbc

我正在处理Spring的JdbcTemplate,并具有以下代码,该代码以收集的值一个一个地更新数据库。当我检查它花费大量时间来更新20,000条记录和不良设计时。

我正在寻求实施 batchUpdate (如果可能的话,这可能是更好的方法),以便一次更新数据库。我们如何实现这一目标?在这里,我正在List<Map<String, Object>>中获取数据。

我通过以下链接:

  1. https://docs.spring.io/spring/docs/3.0.0.M4/reference/html/ch12s04.html
  2. How to perform batch update in Spring with a list of maps?

下面的错误

private static final String sql =
            "INSERT INTO ACCT_LIMIT (ACCT_LIMIT_ID, PRNT_ACC_NUM, ACC_NUM, BILL_YR, CRTE_USER_ID, CRTE_DT) "
                    + "select HDFC_ACC_ID_SEQ.nextval, ?, ?, ?, ?, sysdate from dual "
                    + " where not exists(select * from ACCT_LIMIT where (PRNT_ACC_NUM = ? and ACC_NUM = ? and BILL_YR = ?))";

for (Map<String, Object> m : childParentMapList) {
    BigDecimal accData = (BigDecimal) m.get("ACC_NUM");
    BigDecimal parentAcc = (BigDecimal) m.get("PARENT_ACC_ID");

    List<Map<String, Object>> accntCount = jdbcTemplate.queryForList(another_SQL, parentAcc);
    Long accCount = getaccCount(accntCount);

    if (accCount < 3) {
        Object[] args = new Object[] { parentAcc, accData, LocalDate.now().getYear(), JOB_NAME,
                parentAcc, accData, LocalDate.now().getYear() };
        int[] argTypes = new int[] { Types.NUMERIC, Types.NUMERIC, Types.VARCHAR, Types.VARCHAR, Types.NUMERIC,
                Types.NUMERIC, Types.VARCHAR };

        int rowsUpdated = jdbcTemplate.update(sql, args, argTypes);
        logger.info("getBillableICAList | Rows Updated : "+rowsUpdated);
        if (rowsUpdated == 1) {
            // return list of String
            billableaccDataList.add(accData.toString());
        }
    }
}

有人可以指导我如何做吗?

for (Map<String, Object> map : childParentMapList) {
    Integer count = (Integer) map.get("count");
    if(count < 3) {
        jdbcTemplate.batchUpdate(sql, new BatchPreparedStatementSetter() {

            @Override
            public void setValues(PreparedStatement ps, int i) throws SQLException {
                // TODO Auto-generated method stub

            }

            @Override
            public int getBatchSize() {
                // TODO Auto-generated method stub
                return 0;
            }

        });
        // TODO - Here I need count if that single instance of record gets update and create new String to return ?
    }
}

0 个答案:

没有答案