Почему я не могу сотворить оракул BLOB из родного Java-блоба - PullRequest
3 голосов
/ 19 декабря 2008

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

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

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

java.lang.ClassCastException

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

Ответы [ 3 ]

3 голосов
/ 19 декабря 2008

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

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

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

3 голосов
/ 23 июля 2009

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

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

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

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

3 голосов
/ 19 декабря 2008

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

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

...