关于 hibernate oracle jdbc处理 blob clob 字段

本文讨论了在Oracle数据库中使用BLOB和CLOB类型的注意事项,包括处理大量数据时可能遇到的问题,如内存占用、性能瓶颈及如何正确使用这些类型。建议避免将大文件直接存储在BLOB中,并探讨了更优的存储方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在平时处理一些比较量大的文字数据时候,有可能会出现varchar2 或者long 都无法放下,于是我们想到了oracle 的blob clob ,但是Oracle限制通过它的JDBC驱动传递的byte数组的大小。如果你希望使用很大数量的binary或者serializable 类型的话,你需要打开hibernate.jdbc.use_streams_for_binary。这只能通过JVM级别设定。

但是 ,千万不要以为 blob clob是无敌的 = =!

我觉得无论如何,都最好不要往BLOB中存放大文件。毕竟从数据库中读大文件,是非常缓慢的(想想几百兆的文件从数据库一点一点都到服务器,然后再一点一点response出去)。我觉得大文件还是以文件的方式存放比较好。而且传输的时候,直接给出链接就够了。剩下的事情,由操作系统自己往网卡发就是了。可以大大减轻压力。
HibernateJDBC做了很多封装。所以我们从Hibernate得到的CLOB和BLOB其实都是Hibernate自己实现的。而像Oracle之类的一些数据库,他们如果要操作BLOB、CLOB,需要用他们自己实现的对象。而Hibernate中得到的大字段对象是无法转化成数据库特有的大字段对象的。如果非要这么做,只能单独写纯JDBC。那么JDBC的获得、代码耦合、事务难以控制等问题都来了。
至于缓冲,我不知道数据库驱动保存BLOB能否自动缓冲。但是,缺省情况下,是要先把整个文件都读到内存中的。这个可无法缓冲。所以,如果一个人读入一个10M的文件,那么这10M在存入数据库前,都要保留在内存中,100个人的话,就要1G。如果更大,那么内存需要更是恐怖。

 

 

Oracle JBDC不允许流操作以批量方式执行.

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值