在 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 的 JdbcTemplateSimpleJdbcCall,因为它有方便的 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

Spring JDBC:如何创建表?

Spring jdbc模板:将sql语句保留在代码之外的最佳方法是啥

Spring整合JDBC连接数据库