Java 我是否必须关闭JdbcTemplate连接并手动创建语句?

Java 我是否必须关闭JdbcTemplate连接并手动创建语句?,java,spring,spring-boot,jdbctemplate,Java,Spring,Spring Boot,Jdbctemplate,对于大多数查询,我都使用JdbcTemplate的query()方法和RowMapper,它将在内部完成所有语句和连接工作 但是在一个特定的情况下,我需要从ResultSet中获得一些额外的元数据,并且只想自己处理语句和ResultSet 我是否必须在之后关闭语句或连接,以便将其返回到连接池,或者即使我不使用JdbcTemplate方法,也是由Spring完成的 Connection conn = getJdbcTemplate().getDataSource().getConnecti

对于大多数查询,我都使用
JdbcTemplate
query()
方法和
RowMapper
,它将在内部完成所有语句和连接工作

但是在一个特定的情况下,我需要从
ResultSet
中获得一些额外的元数据,并且只想自己处理
语句
ResultSet

我是否必须在之后关闭
语句
连接
,以便将其返回到连接池,或者即使我不使用JdbcTemplate方法,也是由Spring完成的

    Connection conn = getJdbcTemplate().getDataSource().getConnection();
    PreparedStatement ps = conn.prepareStatement(sql);
    ResultSet rs = ps.executeQuery();

    /* ... */

    ps.close();    // should I do this?
    conn.close();  // and this?

我想你得自己关上它。
看,当你用模板执行它时,模板实现就是这样做的

如果你自己在搞乱连接,是的,你必须关闭它。或者最好使用
连接回调
或其他回调接口之一。为什么需要手动获取连接?在使用
JdbcTemplate
时,我没有必要(或迫切需要)这样做。要轻松生成一些报告,我只想将整个查询结果转储到一个对象中,该对象由一个包含列名的标题数组和一个包含值的行/列的二维数组组成。我想对不同的语句使用相同的方法,因此我必须从ResultSet中获取标题名称。这正是
ResultSetTextRactor
的作用。如果手动处理连接、ResultSet等,首先不应该使用jdbctemplate。模板的要点是为您处理这些问题。但是,您不应该放弃模板,而应该使用它提供的方法。我想我也将使用
DataSourceUtils.releaseConnection()
方法:)