我正在尝试使用mybatis从Oracle数据库中检索BLOB列的内容 . 有一个表'Demo',其中包含BLOB类型的列'binfile' . 我想选择BLOB列并将其显示为字节数组/原始二进制数据 . 我正在使用Oracle瘦JDBC驱动程序 .
mybatis映射器中的查询如下所示:
<mapper namespace="Oracle" >
...
<select id="SelectBinary" resultType="hashmap">
SELECT binfile from mpdemo.Demo
</select>
</mapper>
如果我这样做,我得到的结果如下:
BINFILE: "oracle.sql.BLOB@5d67eb18"
如果我这样做:
<select id="SelectBinaryDup" resultType="hashmap">
SELECT utl_raw.cast_to_varchar2(dbms_lob.substr(binfile)) from mpdemo.Demo
</select>
我显然得到一个错误,说原始变量说'PL / SQL:数字或值错误:原始变量长度太长',因为图像远远超过100 kB,因为SQL中的VARCHAR2变量只能支持2000个字节 .
这个问题有方法解决吗?
我想过编写一个存储过程,它逐块读取BLOB列并将输出写入文件 . 但该文件将保存在数据库服务器上,我无法检索它 .
3 回答
你可以直接使用BLOB,做
import oracle.sql.BLOB;
例子:
您是否尝试将字段映射到jdbcType = LONGVARBINARY?
在我的情况下,我必须实现custom BaseTypeHandler to support Oracle BLOB conversion to byte[] for Mybatis .
mybatis
依赖项 . 如果您使用Maven:我希望这将有所帮助 . 这是对这个优秀答案的改编:https://stackoverflow.com/a/27522590/2692914 .