2013-09-16 18 views
0

我使用彈簧jdbcTemplate.batchupdate來插入一組記錄。jdbcTemplate batchUpdate沒有插入數據超過Interger.MAX_VALUE

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位雙精度值,但我執行這個代碼,DB獲取與更新2147483647,該Integer.MAX_VALUE的。

我也試圖通過INT [] argType在BATCHUPDATE第三PARAM作爲

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

任何人都可以請解釋爲什麼它的這種行爲?

僅供參考我正在使用oracle 11g。

回答

1

我有兩種方法工作。

  1. 創建SqlParameter的,而不是簡單的對象

修改更新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。

直接與PPSS setValues()一起傳遞列表對象。

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

         @Override 
         public void setValues(PreparedStatement ps, Demand argument) 
               throws SQLException { 
          ps.setDouble(1, argument.getDemand()); 
         } 
         } 
);