java - SimpleJdbcCall 中的多个输出参数

标签 java spring spring-boot spring-jdbc

在Java spring boot框架中,尝试使用以下方法使用Store过程

 jdbcTemplate.setDataSource(dataSource);

       SimpleJdbcCall simpleJdbcCall = new SimpleJdbcCall(jdbcTemplate)
                                           .withSchemaName("abc")
                                           .withFunctionName("proname")
                                           .addDeclaredParameter(new
 SqlOutParameter("",""));
        Map<String, Object> map= new HashMap<>();
         map.put("a",a);
        map.put("b",b);
        map.put("c",c);
        map.put("d",d);

 SqlParameterSource in = new MapSqlParameterSource(map);
 Map<String, Object> out = simpleJdbcCall.execute(in);

但是我的程序也有参数,这是我的程序

function proname(z varchar2,
                                            a varchar2,
                                            b varchar2,
                                            c varchar2,
                                            d in out number,
                                            e out number,
                                            f out varchar2,
                                            g out varchar2)

该过程也有输出参数,如上面的代码所示,问题是如何在简单 JDBC 调用中提及多个输出参数(注意多个)???

最佳答案

我尝试了以下方法并且有效:

jdbcTemplate.execute((CallableStatementCreator) con -> {
        con = con.unwrap(OracleConnection.class);
        CallableStatement cs = con.prepareCall("{ ? = call usr.abc.proname(?,?,?,?,?,?,?) }");
        cs.registerOutParameter(1, OracleType.NUMBER);
        cs.setString(2, "a");
        cs.setString(3, "b");
        cs.setString(4, "c");
        cs.registerOutParameter(4, OracleType.NUMBER);
        cs.registerOutParameter(5, OracleType.NUMBER);
        cs.registerOutParameter(6, OracleType.VARCHAR);
        cs.registerOutParameter(7, OracleType.VARCHAR);
        return cs;
    }, (CallableStatementCallback<MyModel>) cs -> {
        cs.execute();
        return new MyModel(cs.getInt(1),
                           cs.getInt(4),
                           cs.getInt(5),
                           cs.getString(6),
                           cs.getString(7));
    });

关于java - SimpleJdbcCall 中的多个输出参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50713653/

相关文章:

java - 防止 Java 中的 HTTP 响应拆分攻击

java - 如何配置 Spring Boot JPA Java 实体以自动修剪每个 CHAR 列中的字符串?

Java 集合 : TreeMap. size() 和 TreeSet.size() : O(1) or O(n)?

java - 检查两个字符串是否是彼此的排列

java - Spring 启动(带 jpa 的 mysql): No bean named 'entityManagerFactory' available

java - 如何在 Spring Boot 1.5.1 Hibernate 中防止隐式缓存

java - Eclipse 4 注入(inject) OSGI 服务

java - 在 ConcurrentHashmap 中缓存值以避免数据库读取

java - 如何在@Transactional 方法中手动强制提交?

spring - 使用 Spring JPA PagingAndSortingRepository 和 thymeleaf 进行分页