2

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

谢谢

4

1 回答 1

0

方法执行有误setValues。您创建实例,OracleCallableStatement但您必须注册PreparedStatement在方法参数中给出的参数,例如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 参数。

于 2018-08-03T07:43:09.670 回答