解决getString not implemented for class oracle.jdbc.driver.T4CBlobAccessor

作者: harde 分类: Java,开发相关,数据库 发布时间: 2014-12-15 18:59

最近在做一个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));
}

⬆️⬆️⬆️不要钱、不用登录、没有广告⬆️⬆️⬆️


如果文章对您有帮助,请至少点下⬆️⬆️⬆️上面⬆️⬆️⬆️的赞,您的鼓励是对我创作的最大支持。
如果没能帮到您,那么很遗憾,如果方便的话,还请在评论区告诉我为什么,谢谢。

⬇️⬇️⬇️下面这个要钱⬇️⬇️⬇️

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注