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"));