当前位置: 代码迷 >> SQL >> java.sql.Blob与oracle.sql.BLOB有关问题
  详细解决方案

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

热度:73   发布时间:2016-05-05 14:26:29.0
java.sql.Blob与oracle.sql.BLOB问题
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"));
  相关解决方案