0

我正在使用 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);

现在我的域对象有一个 22 位的双精度值,但是当我执行此代码时,数据库会更新为 2147483647,即 Integer.MAX_VALUE。

我还尝试将 int[] argType 作为 batchUpdate 中的第三个参数传递为

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

谁能解释为什么它的行为如此?

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

4

1 回答 1

1

我有两种方法有效。

  1. 创建 sqlParameter 而不是普通对象

将更新参数修改为 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。

将列表对象与 PPSS setValues() 一起直接传递。

jdbcTemplate.batchUpdate(updateStmt, myDomainVOList, 
                         new ParameterizedPreparedStatementSetter<Demand>() {

                         @Override
                         public void setValues(PreparedStatement ps, Demand argument) 
                                               throws SQLException {
                             ps.setDouble(1, argument.getDemand());
                         }
                         } 
);
于 2013-09-25T07:42:32.777 回答