使用try-with-resources或在“finally”子句中关闭此“PreparedStatement”。在Spring JDBC中

时间:2018-01-30 22:30:45

标签: java spring jdbc sonarqube spring-jdbc

我从Sonar收到以下问题: SampleDao.java null使用try-with-resources或在“finally”子句中关闭此“PreparedStatement”。

我正在使用Spring JDBC,代码如下:

ResponseObject user = jdbcTemplate.query(new PreparedStatementCreator() {
        @Override
        public PreparedStatement createPreparedStatement(Connection con) throws SQLException {
            PreparedStatement ps = con.prepareStatement(MY_QUERY);
            ps.setLong(1, parameter);
            return ps;
        }
    }, new MyResultSetExtractor());

我的问题是,我认为我不需要关闭连接,因为我有一个连接池,所以您认为我必须做什么,只是忽略声纳问题?或者还有什么我可以做的吗?。

谢谢

1 个答案:

答案 0 :(得分:-3)

这似乎是一个问题,因为您正在创建一个匿名内部类,并且声纳期望在常规方法中创建的prepare语句被关闭。

如果您使用的是Java 8,请尝试使用labmda表达式替换匿名内部类。

ResponseObject user = jdbcTemplate.query(coneection -> {
        PreparedStatement ps = con.prepareStatement(MY_QUERY);
        ps.setLong(1, parameter);
        return ps;
    }
}, new MyResultSetExtractor());