LONG RAW列的jdbc类型和java类型是什么?

时间:2018-07-05 09:49:23

标签: java oracle jdbc long-integer

我面临一个奇怪的问题。我有一张桌子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的答案中提到的longvarbinarybyte[]之后, 我收到一个类强制转换异常:java.lang.String无法转换为[L java.lang.Byte

2 个答案:

答案 0 :(得分:2)

我认为您应该使用byte[]LONGVARBINARY

答案 1 :(得分:1)

根据Hibernate Oracle的方言,它将为LONGVARBINARY。参见org.hibernate.dialect.Oracle8iDialect

registerColumnType( Types.LONGVARBINARY, "long raw" );