ORACLE中,BLOB用于存取二进制文件,CLOB用来存取文本文件,而NBLOB用于存取多字节文件,我说的getBinaryStream只是用来存取二进制文件,CLOB为什么不用getAsciiStream?其实任何数据库的JDBC,如果不能用标准的JDBC接口(getXXX)来访问就不能叫JDBC,什么叫没有意义?而把对数据存取用特定的的厂商的数据类型来访问才有意义?我想不出这世界上还有这样的理论.
to axman :
你说的一点都没错,不过在实际上实现总是和设计有差距,从提供商角度上,可能有他们的考虑,事实对于oracle提供的thin driver 的JDBC实现,并没有对java.sql.Blob接口的getBinaryStream() 方法进行实现,他只是在自己的oracle.sql.BLOB 中进行了实现,这就是为什么我们会不能直接使用JDBC接口的问题,至于为什么会有“这样的理论”,oracle也许有他们的考虑,在随后的使用中我们当然也无法直接把一个JDBC 的BLOB对象转换为oracle.sql.BLOB,因为使用了weblogic的connection pool,weblogic对此在中间层进行了封装,这就是leejianwei 一开始出现的问题,为什么会这样,也许BEA考虑在pool层进行控制的原因,种种原因导致,我们在进行BLOB操作的时候,得难看地写出带有vender烙印的代码,当然这也造成了事实上的不可移植
to ral_lg :
你说的那个 BLOB操作,是否在自己的定义的UserTrasaction 块中 进行blob update 操作而产生 的java.io.IOException: ORA-22920错误?
你是否利用'SELECT ... FOR UPDATE' 来获得row locking.
To:chaowang
8.1中利用 Honor Global Transactions属性来区分 原来的 tx 和非TX datasource,默认是Honor Global Transactions Enable的