jdbcTemplate batchUpdate未插入Interger.MAX_VALUE以外的数据

时间:2013-09-16 16:49:48

标签: sql jdbctemplate spring-jdbc batch-updates

我正在使用spring jdbcTemplate.batchupdate来插入一组记录。

String SQL_QUERY = "UPDATE RECORD_TABLE SET VALUE=?,LAST_UPDATE=?, LAST_USERNAME=? WHERE RECORD_NBR=?"
List<Object[]> updateParams = new Object[]{
 myDomainVO.getBigDoubleValue(),
 myDomainVO.getLastupdateDate(),
 myDomainVO.getLastUserName(),
 myDomainVO.getRecordNbr()
};
getJdbcTemplate().batchupdate(sql,updateParams);

现在我的Domain对象有一个22位的double值,但是当我执行这段代码时,DB会更新为2147483647,即Integer.MAX_VALUE。

我还试图将batch [] argType作为第三个参数传递给batchUpdate

int[] updateParamType = new int[]{
Types.DOUBLE,Types.DATE,Types.VARCHAR,Types.NUMERIC
}

任何人都可以解释为什么它的表现如此吗?

仅供参考我正在使用oracle 11g。

1 个答案:

答案 0 :(得分:1)

我有两种工作方法。

  1. 创建sqlParameter而不是普通对象
  2. 将update params修改为SQLParameterValues列表。

    updateParamList.add(new SqlParameterValue[] {
     new SqlParameterValue(Types.DECIMAL, myDomainVO.getBigDoubleValue()), 
     new SqlParameterValue(Types.VARCHAR, myDomainVO.getLastUserName()), 
     new SqlParameterValue(Types.DATE, myDomainVO.getLastupdateDate()),
     new SqlParameterValue(Types.BIGINT, myDomainVO.getRecordNbr())
    });
    
    1. 或使用BatchPreparedStatementSetter。
    2. 直接传递列表对象和PPSS setValues()。

      jdbcTemplate.batchUpdate(updateStmt, myDomainVOList, 
                               new ParameterizedPreparedStatementSetter<Demand>() {
      
                               @Override
                               public void setValues(PreparedStatement ps, Demand argument) 
                                                     throws SQLException {
                                   ps.setDouble(1, argument.getDemand());
                               }
                               } 
      );