【问题标题】:Remote Runtime Exception while freeing up resources释放资源时出现远程运行时异常
【发布时间】:2014-09-09 16:34:46
【问题描述】:

我的应用程序中有以下代码

finally {
   Utility.close(conn, rs, stmt);
   freeclob(xml);   
}

我添加了 freeclob 方法来释放 clob 对象。然而,在添加这个之后,我得到了

2014 年 9 月 9 日 07:01:45,550 错误 [Error.freeclob()] freeclob:java.sql.free weblogic.rmi.extensions.RemoteRuntimeException 中的错误:意外异常

Q1:谁能告诉我可能的原因。

另外,当我检查 java 文档以了解 clob 的免费方法时,我发现:

void java.sql.Clob.free() throws SQLException

此方法释放 Clob 对象并释放它所拥有的资源。一旦调用 free 方法,该对象就无效。

Q2:我的问题:这里释放资源是什么意思。

【问题讨论】:

  • 最后 { Utility.close(conn, rs, stmt); freeclob(xml); }

标签: java clob


【解决方案1】:

颠倒您执行这些操作的顺序:首先释放 clob,然后关闭其他所有内容。将 Utility.close 方法放在单独的 finally 块中,这样如果 freeclob 抛出异常,就不会导致 close 方法调用被跳过。

API documentation for java.sql.Clob 说:

默认情况下,驱动程序使用 SQL 定位器 (CLOB) 实现 Clob 对象,这意味着 Clob 对象包含指向 SQL CLOB 数据的逻辑指针,而不是数据本身。 Clob 对象在创建它的事务期间有效。

Clob 不是具有 Clob 条目完整内容的对象,它是一个知道如何获取 Clob 的对象,您可以使用该对象将 Clob 的内容流式传输到您的应用程序。这类似于不包含数据的 ResultSet,它是您用来检索数据的东西。因此,与关闭连接时结果集消失的方式相同,关闭结果集时 clob 也会消失。

被释放的资源是由数据库服务器分配的,以便它处理与您的 JDBC 对象的通信。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-06
    • 1970-01-01
    • 2019-09-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多