Spring JDBC template - java.sql.SQLRecoverableException: Clo



我正在尝试使用 JDBCTemplate 执行选择查询并使用结果集来设置对象值。 但是当我调用jobResults.next((时,我收到一个错误,说连接已关闭。但我不会关闭任何连接,因为 Spring 管理了这一点。你能帮我这个吗?

private JdbcTemplate jdbcTemplate;
public CfPersistenceUtil(DataSource dataSource) {
this.jdbcTemplate = new JdbcTemplate(dataSource);
}

public  Vector getItems(CvPrintJob job, CfBatchPrintConfiguration config, String groupId) throws Exception {    
ResultSet jobResults = jdbcTemplate.execute(JOB_QUERY_GROUPID, new PreparedStatementCallback<ResultSet>() {  
@Override
public ResultSet doInPreparedStatement(PreparedStatement ps) throws SQLException, DataAccessException {  
ps.setString(1,job.getPaperColor());
ps.setString(2,job.getPaperSize());
ps.setString(3,job.getDeliveryMethod());
ps.setInt(4,job.getPlex());
ps.setString(5,groupId);                                                                         
return ps.executeQuery();  
}  
});  
while(jobResults.next()) {
CvPrintJobItem item = new CvPrintJobItem();
item.setAuthorID((jobResults.getBigDecimal("AUTHOR_ID")).toString());

}
}

下面的堆栈跟踪

2020-06-23 20:37:37.060  WARN 26800 --- [           main] com.zaxxer.hikari.pool.ProxyConnection   : HikariPool-1 - Connection oracle.jdbc.driver.T4CConnection@21ae6e73 marked as broken because of SQLSTATE(08003), ErrorCode(17009)
java.sql.SQLRecoverableException: Closed Statement: next
at oracle.jdbc.driver.OracleResultSetImpl.next(OracleResultSetImpl.java:247) ~[ojdbc6-11.2.0.3.jar:11.2.0.3.0]
at com.zaxxer.hikari.pool.HikariProxyResultSet.next(HikariProxyResultSet.java) [HikariCP-3.4.2.jar:na]
at com.acn.abp.printbatch.util.CfPersistenceUtil.getItems(CfPersistenceUtil.java:76) [classes/:na]
at com.acn.abp.printbatch.util.CfBatchPrintUtil.getJobs(CfBatchPrintUtil.java:222) [classes/:na]
at com.acn.abp.printbatch.tasklet.ProcessSimplex.execute(ProcessSimplex.java:76) [classes/:na]
java.sql.SQLRecoverableException: Closed Statement: next
at oracle.jdbc.driver.OracleResultSetImpl.next(OracleResultSetImpl.java:247)
at com.zaxxer.hikari.pool.HikariProxyResultSet.next(HikariProxyResultSet.java)
at com.acn.abp.printbatch.util.CfPersistenceUtil.getItems(CfPersistenceUtil.java:76)
at com.acn.abp.printbatch.util.CfBatchPrintUtil.getJobs(CfBatchPrintUtil.java:222)

不能从 doInPreparedStatement 返回 ResultSet。您必须返回一个域对象。 您可以将 while next 循环移动到回调中,也可以使用其他更方便的方法之一,例如 queryForObject

相关内容

  • 没有找到相关文章

最新更新