У меня странная проблема. У меня есть стол 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());
Затем я вызываю метод обновления для обновления таблицы с помощью моей процедуры:
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, но я не уверен, что я должен дать здесь как javaType и jdbcType для столбца с типом данных LONG RAW
.
После использования longvarbinary
и byte[]
, как указано в ответе ewramner,
Я получаю исключение приведения класса: java.lang.String
не может быть преобразовано в [L java.lang.Byte