是否可以在批处理模式下使用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();
                    }}
                );


谢谢

最佳答案

方法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参数。

10-07 17:14