Почему я не могу использовать Oracle BLOB из собственного Java Blob

Я читаю файл из ResultSet, и он требуется для сохранения файла в Oracle Database.

...
ResultSet rs = ...
java.sql.Blob myfile = rs.getBlob("field")
java.io.OutputStream os = ((oracle.sql.BLOB) myfile).getBinaryOutputStream();

Я получаю это сообщение об ошибке

java.lang.ClassCastException

У кого-нибудь есть решение? Спасибо!


person netic    schedule 18.12.2008    source источник


Ответы (3)


Я нашел решение. Хочу поделиться с теми, у кого есть эта проблема.

Код для получения потока вывода из капли Oracle:

java.io.OutputStream os = ((oracle.sql.BLOB) myBlob).setBinaryStream(1L);

setBinaryStream () фактически возвращает объект java.io.OutputStream

person netic    schedule 23.07.2009
comment
@ericbn Пожалуйста, не редактируйте вопрос таким образом, чтобы изменить его смысл / намерение. Вместо этого добавьте комментарий с указанием способа, которым, по вашему мнению, его следует изменить. - person admdrew; 10.09.2014

java.sql.Blob - это интерфейс. Предположительно реализация, возвращенная в вашем ResultSet, отличается от реализации oracle.sql.BLOB?

Что возвращает myfile.getClass()?

person Dan Vinton    schedule 18.12.2008
comment
Думаю ты прав. эти два блога несовместимы. Сейчас я использую weblogic.jdbc.common.OracleBlob, он отлично работает. Хотя это устарело. Но сохраним его до тех пор, пока мы не обновимся до Java 5 или выше. - person netic; 19.12.2008

Кажется, у вас нет oracle.sql.BLOB (если есть, он должен работать, BLOB реализует Blob). Что говорит об этом ClassCastException?

Какую версию Oracle и какую версию драйвера JDBC вы используете?

getBinaryOutputStream в любом случае устарел, вы должны использовать setBinaryStream в интерфейсе JDBC (3.0), что, вероятно, вообще устраняет необходимость перехода к внутреннему классу Oracle.

person Thilo    schedule 18.12.2008
comment
У вас есть хороший совет по использованию setBinaryStream, определенного в JDBC 3.0. К сожалению, мое приложение все еще использует 1.4. Снова буду ждать пока обновимся :) - person netic; 19.12.2008