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

The*_*ght 5 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));
}
Run Code Online (Sandbox Code Playgroud)

我有一个名为procData的散列图,其中我推送这个hexSt变量.

procData.put('fileData',hextSt.toString().toUpperCase());
Run Code Online (Sandbox Code Playgroud)

然后,我调用我的更新方法通过我的过程更新表:

myUpdateDao().update(PROC_STORE_DATA,procData);
Run Code Online (Sandbox Code Playgroud)

在mybatis.xml中,这是我在参数map中定义要更新的列的方法:

<parameterMap>
    <parameter property="updatefileData" javatype="java.lang.String" jdbcType="LONGVARCHAR">
</parameterMap>
Run Code Online (Sandbox Code Playgroud)

但是在运行之后,我收到了这个错误:wrong number or types of arguments in the procedure call - PLS-00306 and ORA-06550.

我花了2天但我不明白问题出在哪里.问题可能出在javaType和jdbcType上,但我不知道我应该在这里为javaType和jdbcType提供数据类型的列LONG RAW.

在使用longvarbinarybyte[]ewramner的答案中提到后,我得到一个类强制java.lang.String转换异常:无法转换为[L java.lang.Byte

ewr*_*ner 2

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

  • 你确定吗?我认为该列包含以十六进制显示的原始字节(因此列类型为 RAW)。我仍然认为您应该保存字节而不用十六进制编码它们。 (2认同)