java.sql.Blob与oracle.sql.BLOB问题

本文深入探讨了Java SQL Blob与Oracle SQL Blob的差异,详细介绍了如何在不同版本的JDBC中操作Blob数据,特别是针对Blob的读写操作在不同JDBC版本中的变化,以及如何通过特定API解决类型不匹配问题。

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

1,java.sql.Blob与oracle.sql.BLOB
   这两个blob仅仅是大小写不同,但是差异很大,java.sql.Blob是一个接口,而oracle.sql.BLOB是一个实现java.sql.Blob的类,并且还有很多扩展的属性和方法,注意不要搞混了。
2,JDBC2.0和JDBC3.0的问题
    classes12.zip实现了JDBC2.0(JDK1.3),而JDBC2.0对于Blob的操作只有读,没有写,所以classes12.zip只好自己扩展了一套对Blob进行写的API,我的例子就是用了这套API。
    ojdbc14.jar实现了JDBC3.0(JDK1.4),JDBC3.0已经包括了对Blob写的操作,而ojdbc14.jar也实现了该API。


java.sql.Blob blob = rs.getBlob("ZIP_DATA");
oracle.sql.BLOB obb = (oracle.sql.BLOB) blob;//这样它会报.ClassCastException->解决办法,那一个封装类来处理类型不匹配问题:
public int setBytes(long pos, byte[] bytes) throws SQLException
    {
//[weblogic]
        if (blob instanceof weblogic.jdbc.vendor.oracle.OracleThinBlob)
        {
            weblogic.jdbc.vendor.oracle.OracleThinBlob oBlob = (weblogic.jdbc.vendor.oracle.OracleThinBlob) blob;
            return  oBlob.putBytes(pos, bytes);
        }
//[endweblogic]
//[websphere]
       
        if (blob instanceof oracle.sql.BLOB)
        {
            oracle.sql.BLOB oBlob = (oracle.sql.BLOB) blob;
            return   oBlob.putBytes(pos, bytes);
        }
//[endwebsphere]
       
        return this.blob.setBytes(pos, bytes);
}

虽然只列出了一个方法,但核心就在这里了

BossThinBlob bossThinBlob = new BossThinBlob(rs.getBlob("ZIP_DATA"));
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值