当前位置: 首页 > 知识库问答 >
问题:

处理大型数据对象,应该释放CLOB吗?

古凌
2023-03-14

我使用Oracle数据库和OJDBC7驱动程序,我使用(Clob)rs.getObject(“data”)从ResultSet获取Clob,然后在方法中将其转换为String:

private String clobToString(Clob data) {
    StringBuilder sb = new StringBuilder();
    try (Reader reader = data.getCharacterStream(); BufferedReader br = new BufferedReader(reader)){
        String line;
        while(null != (line = br.readLine())) {
            sb.append(line);
        }
    } catch (Exception e) {
        logger.error("Failed to read CLOB", e);         
    }    
    return sb.toString();
}
    finally {
        try {
            data.free();
        } catch (SQLException e) {
            logger.error("Failed to release Clob", e);
        }
    }    

共有1个答案

徐昕
2023-03-14

clob没有在该方法之外使用,这并不意味着调用free()是无用的:如果不调用它,至少会延迟资源的释放,直到事务结束(正如Oracle的文档所说)。在java.sql.array/blob/clob类型是否需要“free()”ed中也讨论了这一点?JDBC Blob(not)在使用后是否应该是免费的?和JDBC4的java.sql.clob.free()方法以及向后兼容性

关于从clob获取字符串的简单/本机方法,请参阅Java中读clob到字符串和字符串到clob的最有效解决方案?

 类似资料:
  • 我有一个超过5000个字符的字符串,我想用MyBatis将其保存为XMLTYPE。为此,我做了以下工作: 我在将字符串转换为CLOB时遇到了问题。 如果以第一种方式进行,则创建的CLOB对象是一个SerialClob有3个字段:BUF、LENG和CLOB;但是在这三个字段中,只有两个字段被填充:BUF(buffer)和LENG,但是CLOB是null。 但是如果我用第二种方法来做,我就创建了完整的

  • 问题内容: 我有一种算法,当前会分配很大的双精度数组,它会经常更新和搜索。数组的大小为N ^ 2/2,其中N是算法在其上进行操作的行数。为了与算法周围的应用程序相关联,我还必须保留整个内容的副本。 当然,这对我的算法可以处理的行数施加了限制,因为我要应对堆的限制。到现在为止,我还没有要求使用该算法的人员更新- Xmx设置以分配更多的空间,并且效果很好。但是,我现在遇到了一个真正的问题,我需要此数组

  • null 由于oracle clob字段可以包含4GB(max)的数据,是否有使用SQLPlus获得完整数据块的正确方法?我可以把它作为文件下载吗? 我希望问题是清楚的。我更喜欢在不向数据库注入PL/SQL过程的情况下做到这一点。

  • 我有mysql数据库和hibernate与java的连接。我有4个表: 客户1对多订单 订单1对多订单产品 订单产品多对1订单产品 数据库中已经有客户和产品。我的程序从用户那里收集产品和客户端,我想将它们添加到数据库中。我所需要做的就是: -使用OrderProducts的ArrayList添加订单 -添加所有OrderProducts -使用新订单更新客户端订单ArrayList -使用Orde

  • 问题内容: 我正在制作一个运行ASP.NET WebService的Android应用程序。Webservice发送一个JSON对象,应用程序解析该对象并显示在屏幕上。在一种情况下,JSON对象太大,并且出现Findered Binder Transaction错误。我的解决方案是获取该JSON对象并将其嵌入到应用程序代码中,这样就无需从服务器获取该JSON对象。你能告诉我我可以做的其他事情吗?还

  • 问题内容: 我用来并行化一些繁重的计算。 目标函数返回大量数据(庞大的列表)。我的RAM用完了。 如果不使用,我只需将生成的元素依次计算出来,就将目标函数更改为生成器。 我了解多处理不支持生成器- 它等待整个输出并立即返回,对吗?没有屈服。有没有一种方法可以使工作人员在数据可用时立即产生数据,而无需在RAM中构造整个结果数组? 简单的例子: 这是Python 2.7。 问题答案: 这听起来像是队列