2016-01-20 5 views
0

Я хочу получить изображение base64, которое хранится как CLOB в Oracle. делать this.I попробовал подходы, упомянутые в Retrieve base64 image stored as a CLOB from derby with Worklight adapterКак получить изображение из столбца CLOB, хранящегося в Oracle DB

https://www.ibm.com/developerworks/community/blogs/dhuyvett/entry/jsonstore_revisited_in_worklight_v6_part_1_the_adapter?lang=en

Здесь класс драйвера используется: oracle.jdbc.driver.OracleDriver. Используемый запрос: выберите * from table_name;

Код в адаптере: var clob = response.resultSet [0] .CLOB_COL; var bytes = clob.getSubString (1, clob.length());

Ошибка: Ошибка Ecma: TypeError: не удается найти функцию getSubString в объекте oracle.sql.CLOB.

+0

По ссылке с сайта IBM в своем сообщении вам нужно вызвать 'getBytes' вместо' getSubString'. Вы пробовали это? – vmachan

+0

Да, попробовал то же самое. Получите ошибку: «Ошибка Ecma: TypeError: не удается найти функцию getBytes в объекте oracle.sql.CLOB» – Ash

+0

Я не вижу, как это связано с адаптерами прожектора. Запустите запрос в пользовательском интерфейсе базы данных Oracle. Если он не работает, это не имеет никакого отношения к работе, но с запросом/драйвером. –

ответ

0

TLDR: oracle.sql.CLOB не соответствует java.sql.CLOB. Сайты, на которые вы ссылаетесь, говорят о втором типе, но вы работаете с первым.


Как вы можете видеть из Oracle JDBC documentation, то oracle.sql.CLOB типа не имеет какую-либо методы getSubString ни getBytes.

Тем не менее, java.sql.CLOB имеет метод getSubString, который вы ищете, как вы можете видеть in the doc. Даже если они выглядят очень похожими, это разные типы из разных библиотек. Что вам нужно сделать, это преобразовать Oracle CLOB в Java CLOB с помощью метода toJdbc из Oracle api. Возвращаемый объект будет иметь нужный вам метод getSubString.

Таким образом, технически, это должно работать:

var clob = response.resultSet[0].CLOB_COL.toJdbc(); // Oracle -> Java 
var bytes = clob.getSubString(1, clob.length()); 

EDIT для полноты: вы также путать с getBytes методом, который является методом, который существует только в java.sql.BLOB. BLOB и CLOB и разные типы. Будьте очень осторожны со всеми типами и библиотеками. Все они выглядят одинаково, но все имеют свой собственный API. Особенно, когда вы берете фрагменты кода из Интернета, вам действительно нужно знать, с какими типами вы работаете.

+0

Ошибка: TypeError: не удается найти функцию toJdbc в объекте oracle.sql.CLOB error is throw – Ash

+0

Затем укажите версии Oracle и версии JDBC, которые вы используете. – ffarquet

0

Вы можете позвонить getString() непосредственно на объект ResultSet, а затем выполнить преобразование из BASE64 в двоичное на Java.

 Смежные вопросы

  • Нет связанных вопросов^_^