【发布时间】:2019-09-16 11:00:17
【问题描述】:
我有一个 JDBCStreamTemplate 类,它调用类中的另外两个方法 - JDBCStreamRow 和 JDBCStreamResultSet。这两个类实现了 Autoclosable。
JDBCStreamTemplate 类方法有connection 和preparedStatement。 sql和connection的参数通过构造函数传递给JDBCStreamRow和JDBCStreamResultSet。
连接和 PresparedStatement 正在 JDBCStreamRow 和 JDBCStreamResultSet 类中关闭。但是 SONARQube 给出的错误是 Connection 和 PreparedStatement 需要在 JDBCStreamTemplate 类中关闭。
请告诉我如何解决这个错误?
我试图通过最终放入 JDBCStreamTemplate 来关闭 PS 和 CON,但它在任何预期结果之前显示 Statement Closed。 下面的代码是调用 JdbcStreamResultSet 构造函数的 JDBCStreamTemplate 类方法
try {
Connection connection = DataSourceUtils.getConnection(this.getDataSource());
connection.setAutoCommit(false);
PreparedStatement preparedStatement = connection.prepareStatement(sql);
preparedStatement.setFetchSize(5000);
this.newArgPreparedStatementSetter(args).setValues(preparedStatement);
jdbcStreamResultSet = new JdbcStreamResultSet(qRef, connection, preparedStatement);
} catch (SQLException sqle) {
logger.error("{} JdbcStreamTemplate::streamResultSet: {}", qRef, JdbcUtilities.formatException(sqle));
throw sqle;
} catch (CannotGetJdbcConnectionException ce) {
SQLException sqle = new SQLException(ce.getMostSpecificCause());
logger.error("{} JdbcStreamTemplate::streamResultSet: {}", qRef, Helpers.getExceptionMessage(sqle));
throw sqle;
}
return jdbcStreamResultSet;
}
【问题讨论】:
标签: java jdbc sonarqube prepared-statement