使用 Spring 的 JDBC 支持获取输出参数

Posted

技术标签:

【中文标题】使用 Spring 的 JDBC 支持获取输出参数【英文标题】:Using Spring's JDBC support to get output parameters 【发布时间】:2009-08-18 14:31:22 【问题描述】:

我正在使用 Spring 的 JDBC 支持在 Oracle 数据库上运行 SQL 查询和更新。我想插入一行,然后获取分配给它的键(使用 Oracle 序列)。在普通的 JDBC 代码中,我会包含一个 RETURNING INTO 子句,然后注册一个输出参数 (well described here)

但是,我只想使用 Spring 来处理我所有的 JDBC 工作。对于非插入 SQL 语句,我目前正在使用 MapSqlParameterSource 对象并注册我的所有输入参数。我也可以注册这样的输出参数并将其返回给我吗?我查看了 Spring 文档的第 11 章部分,如果我使用存储过程,我发现支持输出参数,但如果可能的话,我想避免这样做。谢谢。

【问题讨论】:

【参考方案1】:

我不认为 Spring JDBC 支持 API 提供了对 OUT 参数的显式支持,因此您可能需要退后一步,使用JdbcTemplate 提供的更通用的查询 API:

Object execute(PreparedStatementCreator psc, PreparedStatementCallback action)

这使您可以在 Spring 管理的连接和PrepatedStatement 范围内执行任意 JDBC 操作。缺点是ResultSets 之类的处理和整理成为您的问题。

【讨论】:

我害怕那个。不过,我将不得不查看 PreparedStatementCreator。我使用 Spring 的主要原因是从框架中获取连接信息并保持我的 JDBC 代码整洁。看来我又回到了 try/catch/finally 代码。 Spring 仍然会为你做连接和报表的管家工作。【参考方案2】:

查看此代码 - 它可能会执行您想要的操作,但不确定 Oracle 是否支持此语法。

getReturnedGeneratedKeys() Spring JDBC Excample

【讨论】:

以上是关于使用 Spring 的 JDBC 支持获取输出参数的主要内容,如果未能解决你的问题,请参考以下文章

Spring 对DAO 的支持

输出参数中的 mysql/jdbc 函数

Spring Boot Mybatis使用

Spring Boot Mybatis使用

Spring Boot Mybatis使用

#yyds干货盘点# 深入浅出 Spring Boot - 数据访问之 MyBatis