是否可以在批处理模式下使用Spring JDBC API执行存储过程?
我尝试使用Spring JdbcTemplate的方法batchUpdate,但它不起作用。 我使用Spring 3.0和Oracle JDBC驱动程序版本11.2.0.3
JdbcTemplate template = new JdbcTemplate(dataSource);
template.batchUpdate("BEGIN SCHEMA.PERSON_UPDATE(I_N_PERSON_ID=> ? ,I_S_NAME=> ? ,J_N_TID=> ?);END;",
new BatchPreparedStatementSetter() {
public void setValues(PreparedStatement ps, int i) throws SQLException {
OracleCallableStatement cs = (OracleCallableStatement) ps;
cs.setString(1, persons.get(i).getName());
cs.setLong(2, persons.get(i).getPersonId());
cs.registerOutParameter(3, OracleTypes.NUMBER);
}
public int getBatchSize() {
return persons.size();
}}
);
由于
答案 0 :(得分:0)
方法setValues
的实现存在错误。您创建了OracleCallableStatement
的实例,但是必须在PreparedStatement
中注册参数,这些参数在方法argement中给出,例如ps
JdbcTemplate template = new JdbcTemplate(dataSource);
template.batchUpdate("{call SCHEMA.PERSON_UPDATE(?, ?)}",
new BatchPreparedStatementSetter() {
public void setValues(PreparedStatement ps, int i) throws SQLException {
ps.setString(1, persons.get(i).getName());
ps.setLong(2, persons.get(i).getPersonId());
}
public int getBatchSize() {
return persons.size();
}
}
);
但是有一个问题。 PreparedStatement
不适用于out参数。