解决getString not implemented for class oracle.jdbc.driver.T4CBlobAccessor
最近在做一个Oc4j的项目,迁移到Weblogic。
在某些页面会出现“getString not implemented for class oracle.jdbc.driver.T4CBlobAccessor”
调查结果是在framework的DBUtil中,在对Blob字段进行getString时出现问题。
但是问题是之前都试运行好好的。为什么这次出错,怀疑过是驱动版本的问题,但是因为使用的是JNDI,用的Weblogic自带驱动,理论上不存在问题。
搜索了一下,结果全是各大网站抄袭CSDN的一个帖子。(讨厌爬虫这种对互联网完全无益的东西)。
幸运的是,在IBM网站上,找到这样一句话
Cause
Oracle JDBC Driver 11g Release 2 (11.2) no longer supports getString method for retrieving BLOB column values出处:http://www-01.ibm.com/support/docview.wss?uid=swg21596361
那么原因就很明了了。高版本驱动不再支持BLOB转String了。
知道问题所在,也就好解决了。
写一个方法:(注意new String(bytes),可能会引发编码问题,不在本文讨论之列,请自行解决。)
private static String blobToString(Blob blob) throws SQLException { String result = null; if(blob!=null){ try{ byte[] bytes = IOUtils.toByteArray(blob.getBinaryStream()); result = new String(bytes); } catch (IOException e) { e.printStackTrace(); } } return result; }
在原有的getString处,加一个判断
加一条判断:
if(Types.BLOB == rsmd.getColumnType(i)){ String result = blobToString(rs.getBlob(i)); }