首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SimpleJdbcCall中的多个out参数

SimpleJdbcCall中的多个out参数
EN

Stack Overflow用户
提问于 2018-06-06 14:34:35
回答 5查看 11.3K关注 0票数 5

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

代码语言:javascript
复制
 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);

但我的过程也有out参数,这是我的过程

代码语言:javascript
复制
function proname(z varchar2,
                                            a varchar2,
                                            b varchar2,
                                            c varchar2,
                                            d in out number,
                                            e out number,
                                            f out varchar2,
                                            g out varchar2)

这个过程也有out参数,问题是如何在简单的JDBC调用中提到多个out参数(注意多个)?

EN

回答 5

Stack Overflow用户

发布于 2020-03-03 16:53:50

我试着像下面这样做,它起作用了:

代码语言:javascript
复制
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));
    });
票数 1
EN

Stack Overflow用户

发布于 2018-06-06 15:40:37

您可以按照以下教程从存储过程中接受多个out参数。这将使您对如何实现这一点有一个简要的了解:

  1. Spring JDBC with Stored Procedures
  2. Spring JDBC with Simple JDBC Call

取上篇文章中的示例代码,下面是调用执行存储过程的方法:

代码语言:javascript
复制
SimpleJdbcCall jdbcCall = new SimpleJdbcCall(dataSource).withProcedureName("getRecord");
SqlParameterSource in = new MapSqlParameterSource().addValue("in_id", id);
Map<String, Object> out = jdbcCall.execute(in);

在相同的示例中,一旦您获得了所需的输出,您将以以下格式从响应中获取OUT参数:

代码语言:javascript
复制
Student student = new Student();
student.setId(id);
student.setName((String) out.get("out_name"));
student.setAge((Integer) out.get("out_age"));

希望这能有所帮助!

票数 0
EN

Stack Overflow用户

发布于 2020-03-03 14:50:49

您可以使用SimpleJdbcCall的declareParameters方法,例如:

新建.declareParameters(新建SqlParameter("in_id",Types.NUMERIC),新建SqlOutParameter("out_first_name",Types.VARCHAR),新建SqlOutParameter("out_last_name",Types.VARCHAR),新建SqlOutParameter("out_birth_date",Types.DATE) );

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50713653

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档