Spring boot 使用Spring批处理中的IN和OUT参数调用存储过程

Spring boot 使用Spring批处理中的IN和OUT参数调用存储过程,spring-boot,spring-batch,java-stored-procedures,Spring Boot,Spring Batch,Java Stored Procedures,我试图从Spring批处理中执行一个存储过程,该存储过程有两个参数,一个IN参数和一个OUT参数。我想要的是在调用存储过程时获得结果集和out参数 我提到和 我可以使用它来调用只有IN参数的存储过程,但是,在注册OUT参数后,我不能调用它 如果我们引用可以使用的原始JDBC模板,就可以使用 我相信StoredProcedureItemReader或storedprocedureItemReaderBuilder在幕后使用CallableStatement 我的问题是,如何注册参数以在Spring

我试图从Spring批处理中执行一个存储过程,该存储过程有两个参数,一个IN参数和一个OUT参数。我想要的是在调用存储过程时获得结果集和out参数

我提到和

我可以使用它来调用只有IN参数的存储过程,但是,在注册OUT参数后,我不能调用它

如果我们引用可以使用的原始JDBC模板,就可以使用

我相信
StoredProcedureItemReader
storedprocedureItemReaderBuilder
在幕后使用
CallableStatement

我的问题是,如何注册参数以在Spring批处理中使用

这是我试过的一个示例代码

@StepScope
    @Bean
    public StoredProcedureItemReader<MyRow> rowReader(@Value("#{stepExecutionContext[tableName]}") String tableName) {
        return new StoredProcedureItemReaderBuilder<MyRow>()
                .procedureName("GetNameCountByFname")
                .parameters(
                        new SqlParameter[]{
                                new SqlParameter("fname", Types.VARCHAR),
                                new SqlOutParameter("total", Types.INTEGER)
                        }).
                        preparedStatementSetter(
                                new PreparedStatementSetter() {
                                    @Override
                                    public void setValues(PreparedStatement ps)
                                            throws SQLException {
                                        ps.setString(1, "bob");
                                    }
                                }
                .rowMapper(new MyRowMapper(tableName))
                .name(tableName + "_read")
                .dataSource(dataSource)
                .build();
    }
调用以下存储过程

DELIMITER $$

CREATE PROCEDURE GetNameCountByFname(
    IN  fname VARCHAR(25),
    OUT total INT
)
BEGIN
    SELECT COUNT(*)
    INTO total
    FROM `first`
    WHERE `name` = fname;
END$$

DELIMITER ;
我的问题是,如何使用StoredProcedureItemReaderBuilder注册参数以在Spring批处理中执行


那是不可能的。此功能已被请求,但已被拒绝。请在中查找更多详细信息。

您好Saad,欢迎访问SO,您是否尝试深入了解arrayIndex的出界位置exception@AshishShetkar谢谢你的欢迎,是的。我无法控制的参数索引被设置为-1。马哈茂德的回答告诉我,我不可能用这种方法。因此,现在我想实现一个ItemReader,在这里我将使用普通的JDBC调用显式地调用SP。在这种情况下,我是否应该实现一个ItemReader来显式地从带有In和Out变量的存储过程中进行读取?是的,您需要一个自定义读取器。如果答案有帮助,请接受:
DELIMITER $$

CREATE PROCEDURE GetNameCountByFname(
    IN  fname VARCHAR(25),
    OUT total INT
)
BEGIN
    SELECT COUNT(*)
    INTO total
    FROM `first`
    WHERE `name` = fname;
END$$

DELIMITER ;