Что такое тип jdbc и тип java для столбца LONG RAW? - PullRequest
0 голосов
/ 05 июля 2018

У меня странная проблема. У меня есть стол 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

Ответы [ 2 ]

0 голосов
/ 07 июля 2018

В соответствии с диалектом Hibernate Oracle это будет LONGVARBINARY. См org.hibernate.dialect.Oracle8iDialect:

registerColumnType( Types.LONGVARBINARY, "long raw" );
0 голосов
/ 05 июля 2018

Я думаю, вы должны использовать byte[] и LONGVARBINARY.

...