读了Klyuan的"Ibatis读写CLOB数据", 感觉受益良多。其中涵盖了利用ibatis插入数据库BLOB/CLOB数据的四种方法. 其中尤属采用10g的驱动,和通过配置parameterMap和resultMap的方法最为简单,且没有局限性.可视为一个完美的解决方案.
四种方法中我尝试了除jdbc以外的三种方法, 在一开始都没有成功.最后发觉是oracle的驱动的问题. 原来用的是classes12.jar. 当使用最后一种采用oracle10g驱动的方法时, 他会报" java.sql.SQLException:数据大小超出此类型的最大值: 105542". 而当通过实现ibatis的回调接口来实现时,它会报oracle错误"ORA-24813: 不能发送或接收不受支持的 LOB" . 以下是我写的一个OracleBlobTypeHandlerCallback. 在原文中只有OracleClobTypeHandlerCallback.
在换成ojdbc14.jar驱动后,问题解决了. 呵呵!
在我sql文件中并没有使用parameterMap, 这是因为当我指定blob字段的javaType为"[]byte"时, 在tomcat服务器启动时会报错: java.lang.ClassNotFoundException: []byte. 目前问题仍未解决.....
另外我对原文中对前三种方法的分析有些还不是很明白.
--引用原文
上面三种方法都存在的问题:
1. 使用jdbc来实现,就失去了使用ibatis带来的便利,同时也失去了自动事务管理的能力,还有需要自己去手工管理连接对象。代码量也相当复杂。
2. 使用spring提供的处理器,不支持采用数据连接池的数据源,有很大的局限性。
3. 通过实现ibatis的回调接口来实现,也有一定的局限性,需要新增一个类,配置也不方便,还可能会出错。
--
对于第二点中提到的spring提供的处理器不支持数据连接池的数据源, 还有第三点提到的局限性还有待以后好好领悟.