与Oracle 12c的Oracle Connection关闭问题

问题描述 投票:0回答:1

我在我的应用程序中使用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);
    }

如需更多信息,请通知我

java-8 oracle12c
1个回答
0
投票

使用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();
}
© www.soinside.com 2019 - 2024. All rights reserved.