【问题标题】:Oracle Connection close issue with oracle 12coracle 12c 的 Oracle 连接关闭问题
【发布时间】:2018-06-09 01:57:51
【问题描述】:

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

请让我知道更多信息

【问题讨论】:

  • 为了帮助您,我们需要一些其他信息:向我们展示您如何管理连接,如何调用 close 方法...
  • 用调用代码编辑了我的问题
  • 您使用的是哪个 java 版本?如果 java >=1.7 为什么你不使用 try-with-resources 语句,所以你不必手动处理这些东西?
  • 我正在使用主题中指定的 java 1.8,在 finally 块中我正在关闭语句
  • 您的问题解决了吗?分享完整代码

标签: java-8 oracle12c


【解决方案1】:

使用 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();
}

【讨论】:

    猜你喜欢
    • 2020-05-25
    • 1970-01-01
    • 2017-02-21
    • 1970-01-01
    • 2012-07-04
    • 2020-10-09
    • 2017-06-19
    • 1970-01-01
    相关资源
    最近更新 更多