在 Spring JDBC 中,如何在语句上设置 RESULT SET HOLDABILITY?
Posted
技术标签:
【中文标题】在 Spring JDBC 中,如何在语句上设置 RESULT SET HOLDABILITY?【英文标题】:In Spring JDBC, how to set RESULT SET HOLDABILITY on statements? 【发布时间】:2011-02-03 08:00:57 【问题描述】:我想准备将resultSetHoldability
参数设置为ResultSet.CLOSE_CURSORS_AT_COMMIT
的语句:
PreparedStatement stmnt = conn.prepareStatement(sql, resultSetType, resultSetConcurrency,
ResultSet.CLOSE_CURSORS_AT_COMMIT)
...prepareCall 也是如此。我目前正在使用 Spring 的 JdbcTemplate
和 SimpleJdbcCall
,因为它有方便的 declareParameters()
和 execute(Map paramValues)
方法。
那么设置resultSetHoldability
的最简单方法是什么?
【问题讨论】:
【参考方案1】:最简单的方法是在JdbcTemplate
上使用各种query
方法之一,该方法将PreparedStatementCreator
对象作为第一个参数。
你给它一个PreparedStatementCreator
对象,它从提供的Connection
构造PreparedStatement
,并返回它,例如
PrepatedStatementCreator psc = new PrepatedStatementCreator()
public PreparedStatement createPreparedStatement(Connection conn)
return conn.prepareStatement(sql, resultSetType, resultSetConcurrency,
resultSetHoldability);
jdbcTemplate.query(psc, ...);
【讨论】:
【参考方案2】:您可以使用以下方法。
execute(ConnectionCallback action)
connectioncallback 使您可以访问具有setHoldability
方法的连接对象
【讨论】:
我是否理解正确,在调用任何其他 query() 或 call() 方法之前,我应该使用自己的连接回调调用 execute()?那么它会使用正确设置的连接吗? 不 - 您使用 connectionCallback 来执行您想要执行的任何 jdbc 操作。这是因为不能保证在调用 execute 时获得与调用 query 时相同的连接。 所以我掌握了 Connections,进行了设置,然后……手动完成 Spring 通常会为我做的所有事情?以上是关于在 Spring JDBC 中,如何在语句上设置 RESULT SET HOLDABILITY?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用带有 Spring JDBC 的 MERGE 语句插入/更新单个记录
如何使用 Spring Boot 设置 Spring JDBC 连接池?
如何在spring jdbc模板中将自动提交设置为false