我在我的应用程序中使用java 1.8和oracle 12c版本。作为其中的一部分,我有以下代码来关闭声明。
protected static void close(Statement p_stmt)
throws DAOException
{
if (p_stmt != null) {
try {
p_stmt.close();
} catch (SQLException sqle) {
m_logger.error("Error closing statement", sqle);
throw new DAOException("Error closing statement", sqle);
}
}
}
当这个方法执行时,我面临以下错误,但它没有一致地发生。
Error closing statement
java.sql.SQLRecoverableException: Closed Connection
at oracle.jdbc.driver.PhysicalConnection.needLine(PhysicalConnection.java:4220)
at oracle.jdbc.driver.OracleStatement.closeOrCache(OracleStatement.java:1431)
at oracle.jdbc.driver.OracleStatement.close(OracleStatement.java:1410)
at oracle.jdbc.driver.OracleStatementWrapper.close(OracleStatementWrapper.java:102)
at oracle.jdbc.driver.OraclePreparedStatementWrapper.close(OraclePreparedStatementWrapper.java:82)
我可以帮助找出这个问题的根本原因吗?
我的主叫代码是:
finally
{
// do not close the connection here
close(result);
close(stmt);
}
如需更多信息,请通知我
使用try-with-resource语句而不是手动关闭语句,结果集和连接,如下所示:
try (Connection con = DriverManager.getConnection(myConnectionURL);
PreparedStatement ps = con.prepareStatement(sql)) {
ps.setxxx();
try (ResultSet rs = ps.executeQuery()) {
<your code to process results>
}
} catch (SQLException e) {
e.printStackTrace();
}