我正在使用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。
答案 0 :(得分:1)
我有两种工作方法。
将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())
});
直接传递列表对象和PPSS setValues()。
jdbcTemplate.batchUpdate(updateStmt, myDomainVOList,
new ParameterizedPreparedStatementSetter<Demand>() {
@Override
public void setValues(PreparedStatement ps, Demand argument)
throws SQLException {
ps.setDouble(1, argument.getDemand());
}
}
);