我面临一个奇怪的问题。我有一张桌子file_data
。它有一个名为filedata
的列,数据类型为long raw
。在此列中,excel文件的十六进制表示形式像D01A01....
一样存储。现在,我有一个名为“ PROC_STORE_DATA”的过程。我正在从Java类中调用此过程,并尝试在该表列中插入Excel电子表格内容。
在我的Java类中,我正在获取文件内容,如下所示:
byte[] bytes = fileData.getBytes();
StringBuffer hexSt = new StringBuffer();
for(byte b : bytes){
hextSt.append(Integer.toHexString(b & 0xff));
}
我有一个名为procData的哈希图,在其中推送了这个hexSt
变量。
procData.put('fileData',hextSt.toString().toUpperCase());
然后,我通过程序调用update方法来更新表:
myUpdateDao().update(PROC_STORE_DATA,procData);
在mybatis.xml中,这是我在参数映射中定义要更新的列的方式:
<parameterMap>
<parameter property="updatefileData" javatype="java.lang.String" jdbcType="LONGVARCHAR">
</parameterMap>
但是运行此命令后,出现以下错误:wrong number or types of arguments in the procedure call - PLS-00306 and ORA-06550
。
我已经花了2天的时间,但我不知道问题出在哪里。问题可能出在javaType和jdbcType上,但是我不确定对于数据类型为LONG RAW
的列,我应该在此处以javaType和jdbcType的形式给出什么。
使用ewramner的答案中提到的longvarbinary
和byte[]
之后,
我收到一个类强制转换异常:java.lang.String
无法转换为[L java.lang.Byte
答案 0 :(得分:2)
我认为您应该使用byte[]
和LONGVARBINARY
。
答案 1 :(得分:1)
根据Hibernate Oracle的方言,它将为LONGVARBINARY
。参见org.hibernate.dialect.Oracle8iDialect
:
registerColumnType( Types.LONGVARBINARY, "long raw" );