powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Вопрос по java.sql.Clob
49 сообщений из 49, показаны все 2 страниц
Вопрос по java.sql.Clob
    #34591659
Asparov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Стоит задача, чтобы не использовать оракловский драйвер а пользоваться только стандартными ява библиотеками java.sql. Вообщем был код
Код: plaintext
1.
2.
                   CLOB oracleClob = ((OracleResultSet) rs).getCLOB( 1 );
                   Writer out = oracleClob.getCharacterOutputStream();

я заменяю на

Clob oracleClob = ((ResultSet) rs).getCob(1);

Вопрос: Чем заменить oracleClob.getCharacterOutputStream(); т.к. getCharacterOutputStream() это расширение ораклововского драйвера?
...
Рейтинг: 0 / 0
Вопрос по java.sql.Clob
    #34591702
Фотография Denis Popov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
JDK какой версии?
...
Рейтинг: 0 / 0
Вопрос по java.sql.Clob
    #34591706
Asparov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
JDK 1.4
...
Рейтинг: 0 / 0
Вопрос по java.sql.Clob
    #34591748
Фотография Denis Popov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
По-моему Clob.setCharacterStream() . Кстати, в драйвере от Oracle 10g он уже реализован, а getCharacterOutputStream() помечен как устаревший. Другое дело, что в более ранних версиях Oracle JDBC этот метод может быть еще не реализован.
...
Рейтинг: 0 / 0
Вопрос по java.sql.Clob
    #34591765
Asparov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо.
Т.е. я должен заменить на

Код: plaintext
1.
2.
                   Clob oracleClob = ((ResultSet) rs).getClob( 1 );
                   Writer out = oracleClob.setCharacterStream( 1 );
...
Рейтинг: 0 / 0
Вопрос по java.sql.Clob
    #34591929
Asparov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А еще такой вопросик

А чем заменить

Код: plaintext
1.
                       BLOB oracleBlob = BLOB.empty_lob();

empty_lob() метод в стандартной яве отсутствует (
...
Рейтинг: 0 / 0
Вопрос по java.sql.Clob
    #34592053
Фотография Denis Popov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Asparov wrote:

> А чем заменить BLOB oracleBlob = BLOB.empty_lob();
>
> empty_lob() метод в стандартной яве отсутствует (

А в чем цель всего этого? Можно в Oracle создавать временный Clob через метод
dbms_lob.createTemporary() и возвращать его клиенту. Можно создать свой класс, реализующий интерфейс
Clob и работать с ним.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Вопрос по java.sql.Clob
    #34592065
Фотография Denis Popov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Denis Popov wrote:
> Можно создать свой класс, реализующий интерфейс Clob и работать с ним.


Как тут, например: http://kickjava.com/src/org/hibernate/lob/ClobImpl.java.htm
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Вопрос по java.sql.Clob
    #34592082
Asparov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Смысл в том что программа работает с различными версиями Оракла, а различные версии требуют свои версии JDBC драйвера, т.е. нет одного работающего со всеми версиями, поэтому идея использовать только стандартные джава классы чтобы можно было сразу поддерживать все версии Оракла.
...
Рейтинг: 0 / 0
Вопрос по java.sql.Clob
    #34592139
Фотография Denis Popov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Asparov wrote:

> Смысл в том что программа работает с различными версиями Оракла, а
> различные версии требуют свои версии JDBC драйвера, т.е. нет одного
> работающего со всеми версиями.

Вообще-то я беру последнюю версию JDBC от Oracle10g и работаю через них с БД Oracle любой верcии в
пределах от 9.2 до 10.2. Какие версии БД требуют своих версий JDBC? Имхо это независимые понятия.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Вопрос по java.sql.Clob
    #34592243
Asparov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В программе требуется одновременная поддержка Oracle 7.3 и 10.2 включая и девятку естесственно.
...
Рейтинг: 0 / 0
Вопрос по java.sql.Clob
    #34592269
Фотография Denis Popov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Asparov wrote:

> В программе требуется одновременная поддержка Oracle 7.3 и 10.2 включая
> и девятку естесственно.

Но если ты попытаешься везде использовать Clob.setCharacterStream(), то на ранних версиях драйверов
получишь исключение, мол, еще нереализовано.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Вопрос по java.sql.Clob
    #34592283
Asparov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
на ранних версиях каких драйверов?
...
Рейтинг: 0 / 0
Вопрос по java.sql.Clob
    #34592325
zalexaka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Asparovна ранних версиях каких драйверов?
JDBC конешно :)

к сведению:
драйвер 10.2.0.3.0 с 8-кой(8.1.6.0.0) работает(с клобами в т.ч.) замечательно.
...
Рейтинг: 0 / 0
Вопрос по java.sql.Clob
    #34592394
Фотография Denis Popov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Asparov wrote:

> на ранних версиях каких драйверов?

Например, кусок кода класса oracle.sql.CLOB из JDBC Oracle 9.2:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
      public   int  setString( long  l, String s)
          throws  SQLException
     {
         DBError.throwUnsupportedFeatureSqlException();
          return  - 1 ;
     }

      public   int  setString( long  l, String s,  int  i,  int  j)
          throws  SQLException
     {
         DBError.throwUnsupportedFeatureSqlException();
          return  - 1 ;
     }

      public  OutputStream setAsciiStream( long  l)
          throws  SQLException
     {
         DBError.throwUnsupportedFeatureSqlException();
          return   null ;
     }

      public  Writer setCharacterStream( long  l)
          throws  SQLException
     {
         DBError.throwUnsupportedFeatureSqlException();
          return   null ;
     }

      public   void  truncate( long  l)
          throws  SQLException
     {
         DBError.throwUnsupportedFeatureSqlException();
     }

Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Вопрос по java.sql.Clob
    #34592464
Asparov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Так в том то и дело что суть изменений которые нужно сделать заключается в том чтобы полностью отказаться от драйверов оракла и использовать только стандартные возможности явы. Т.е. задание выглядит следующим образом

1)to replace Oracle batch with JDBC standard batch
2)to replace oracle.sql.BLOB/CLOB with java.sql.Blob/Clob
...
Рейтинг: 0 / 0
Вопрос по java.sql.Clob
    #34592499
zalexaka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Asparovполностью отказаться от драйверов оракла и использовать только стандартные возможности явы забавно, если у вас получиться без драйвера то огромная просьба - сообщить нам неразумным
зы по доброму конешно :)
...
Рейтинг: 0 / 0
Вопрос по java.sql.Clob
    #34592512
Asparov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
а в чем может оказаться проблема? по сути то в java.sql.* есть все необходимое...
я понимаю что идея не особо разумная, но надо либо реализовать ее либо аргументированно объяснить что это невозможно. Может быть вы можете привести мне ссылку на какие нибудь документы в которых объективно описана сложность возможности реализации этого? был бы очень благодарен.
...
Рейтинг: 0 / 0
Вопрос по java.sql.Clob
    #34592522
Asparov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
или может быть есть какой нибудь другой способ реализовать одновременную поддержку Oracle 7.2 и Oracle 10.2?
...
Рейтинг: 0 / 0
Вопрос по java.sql.Clob
    #34592527
Фотография Denis Popov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Asparov wrote:

> 2)to replace oracle.sql.BLOB/CLOB with java.sql.Blob/Clob

Java декларирует интерфейсы, разработчика драйверов их реализуют. То, что ты будешь использовать в
коде java.sql.Clob вместо oracle.sql.CLOB, совсем не значит, что oracle.sql.CLOB не будет
использоваться вообще. Будет, но неявно.



Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Вопрос по java.sql.Clob
    #34592601
Фотография Denis Popov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Asparov wrote:

> или может быть есть какой нибудь другой способ реализовать одновременную
> поддержку Oracle 7.2 и Oracle 10.2?

Для начала я бы проверил следующее: взял бы последние JDBC от Oracle 10.2 и попытался поработать
через них с Oracle 7.2 в рамках требуемой задачи. Т.е. даже если нет полной совместимости, но нужные
вещи работают, то и хорошо.

И посмотри JDBC 10.2 Feature List, по-моему Oracle 7 там упоминается:
http://download-uk.oracle.com/docs/cd/B19306_01/java.102/b14355/overvw.htm#BABJFBIF
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Вопрос по java.sql.Clob
    #34592656
Asparov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
к сожалению не работает, вылетает ошибка, вот что пишут по этому поводу

автор
# llanerobass Says:
October 26th, 2006 at 5:28 pm And what about Oracle 7.2.3 & Oracle 7.1.6 versions? I’ve been trying to use the lastest Oracle JDBC drivers over those versions and it fails… Even worst, I need to use JDBC over two different Oracle DBs: a 9i DB and a 7.2.3 DB (the lastest Oracle JDBC driver do not work over the 7.2.3 DB so I needed to load dynamically two versions of the Oracle JDBC driver… What a thing to do!)
# llanerobass Says:
October 26th, 2006 at 7:39 pm If you try to connect to an Oracle 7.2.3 DB using the newest version of the JDBC drivers, you’ll get an ORA-01010 error: “invalid OCI operation”.
...
Рейтинг: 0 / 0
Вопрос по java.sql.Clob
    #34592722
Фотография Timm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AsparovВ программе требуется одновременная поддержка Oracle 7.3 и 10.2 включая и девятку естесственно.
Отмазывайтесь от этого щастья. Ограничтесь хотя б 8i - 10g.
Поддерживать в приложении фактически desupported версию Оракла это страшно :)
...
Рейтинг: 0 / 0
Вопрос по java.sql.Clob
    #34592725
Фотография Denis Popov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Asparovк сожалению не работает, вылетает ошибка, вот что пишут по этому поводу
Цитата отсюда?
http://technology.amis.nl/blog/?p=1385#comment-142898
...If you try to connect to an Oracle 7.2.3 DB using the newest version of the JDBC drivers, you’ll get an ORA-01010 error: “invalid OCI operation”.
Заметь, Oracle 7.2.3, а у тебя:
AsparovВ программе требуется одновременная поддержка Oracle 7.3 и 10.2 включая и девятку естесственно.
причем следующий комментарий по этой сылке:
http://technology.amis.nl/blog/?p=1385#comment-144881 You should at least upgrade to 7.3.4...
Так что имхо еще не все потеряно, как минимум стОит попробовать самому, причем в двух вариантах, через OCI- и THIN-версии драйверов.
...
Рейтинг: 0 / 0
Вопрос по java.sql.Clob
    #34592753
Asparov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Timm AsparovВ программе требуется одновременная поддержка Oracle 7.3 и 10.2 включая и девятку естесственно.
Отмазывайтесь от этого щастья. Ограничтесь хотя б 8i - 10g.
Поддерживать в приложении фактически desupported версию Оракла это страшно :)

согласен что это самый простой и оптимальный выход, но к сожалению он не подходит, т.к. как хозяин барин, ну надо им использовать семерку и никуда от этого не деться, и то что она уже не суппортится это не довод, наверное у них все основные базы заточены под семерку уже много лет они пользуются и видимо все этим довольны ( хотя я сам прекрасно понимаю что это страшно, но тем не менее...
...
Рейтинг: 0 / 0
Вопрос по java.sql.Clob
    #34592827
Фотография Timm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Asparov Timm AsparovВ программе требуется одновременная поддержка Oracle 7.3 и 10.2 включая и девятку естесственно.
Отмазывайтесь от этого щастья. Ограничтесь хотя б 8i - 10g.
Поддерживать в приложении фактически desupported версию Оракла это страшно :)

согласен что это самый простой и оптимальный выход, но к сожалению он не подходит, т.к. как хозяин барин, ну надо им использовать семерку и никуда от этого не деться, и то что она уже не суппортится это не довод, наверное у них все основные базы заточены под семерку уже много лет они пользуются и видимо все этим довольны ( хотя я сам прекрасно понимаю что это страшно, но тем не менее...
Даже это - не самый простой выход. Между 8.1.7.4 и 10.2.0.3 пять лет и несколько сотен МБ документации :)
В общем, попробуйте то что написал Денис, и если не получится - то без ограничений никак.
+ все же не стОит добиваться работы драйвера на "чистом" JDBC API.
...
Рейтинг: 0 / 0
Вопрос по java.sql.Clob
    #34592838
Asparov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Denis Popov Asparovк сожалению не работает, вылетает ошибка, вот что пишут по этому поводу
Цитата отсюда?
http://technology.amis.nl/blog/?p=1385#comment-142898
...If you try to connect to an Oracle 7.2.3 DB using the newest version of the JDBC drivers, you’ll get an ORA-01010 error: “invalid OCI operation”.
Заметь, Oracle 7.2.3, а у тебя:
AsparovВ программе требуется одновременная поддержка Oracle 7.3 и 10.2 включая и девятку естесственно.
причем следующий комментарий по этой сылке:
http://technology.amis.nl/blog/?p=1385#comment-144881 You should at least upgrade to 7.3.4...
Так что имхо еще не все потеряно, как минимум стОит попробовать самому, причем в двух вариантах, через OCI- и THIN-версии драйверов.


Дело в том что протестить то можно будет оно работать или нет у меня, но не факт что эти драйвера будут полностью корректно работать с Ораклом пользователей, а наблюдать потом кучу багов особо желания нет. Меня вот еще смутило что по данной ссылочке http://www.stanford.edu/dept/itss/docs/oracle/10g/java.101/b10979/getsta.htm написано следующее

2.1.1 Backward Compatibility

The JDBC drivers are certified to work with the currently supported versions of the database. (You can find a complete up-to-date list of supported databases at http://metalink.oracle.com, Note 203849.1.) For example, the 10g Release 1 (10.1) JDBC Thin drivers are certified to work with the 9.2.x, 9.0.1.x, and 8.1.7 database releases. The 10g Release 1 (10.1) JDBC thin drivers are not certified to work with older, unsupported database releases, such as 8.0.x and 7.x.

Т.е. драйвера для десятки не сертифицируются для 8ки и 7ки т.е. вполне возможна некорректная работа. Есть какая нибудь ссылка где ясно и оффициально написано что последний оракловский драйвер должен работать с 7.3 версией чтоб я мог эту информацию показать заказчику и объяснить ему что он со своей идеей не прав?
...
Рейтинг: 0 / 0
Вопрос по java.sql.Clob
    #34592864
Asparov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Timm Asparov Timm AsparovВ программе требуется одновременная поддержка Oracle 7.3 и 10.2 включая и девятку естесственно.
Отмазывайтесь от этого щастья. Ограничтесь хотя б 8i - 10g.
Поддерживать в приложении фактически desupported версию Оракла это страшно :)

согласен что это самый простой и оптимальный выход, но к сожалению он не подходит, т.к. как хозяин барин, ну надо им использовать семерку и никуда от этого не деться, и то что она уже не суппортится это не довод, наверное у них все основные базы заточены под семерку уже много лет они пользуются и видимо все этим довольны ( хотя я сам прекрасно понимаю что это страшно, но тем не менее...
Даже это - не самый простой выход. Между 8.1.7.4 и 10.2.0.3 пять лет и несколько сотен МБ документации :)
В общем, попробуйте то что написал Денис, и если не получится - то без ограничений никак.
+ все же не стОит добиваться работы драйвера на "чистом" JDBC API.


А можете конкретно как нибудь объективно объяснить почему на "чистом" JDBC API это нереально. Хотя бы один конкретный пример почему это невозможно. Просто сказать заказчикам что это глупо или нереально это ничего не сказать, надо аргументировать это как нибудь. Просто на самом деле я не спец по OJDBC драйверам и пользовался всегда стандартными схемами реализации работы с базой данных включая и использование OJDBC драйвера, но как загвоздка появляется невозможность поддерживать (как утверждают заказчики) версии Оракла. Я конечно могу протестить и получить саксессфул результаты, но тем не менее для этого нужна дополнитильно аргументированная информация о том что либо это невозможно либо возможно но с такими то условиями.
Заранее спасибо.
...
Рейтинг: 0 / 0
Вопрос по java.sql.Clob
    #34592887
Фотография Timm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AsparovТ.е. драйвера для десятки не сертифицируются для 8ки и 7ки т.е. вполне возможна некорректная работа. Есть какая нибудь ссылка где ясно и оффициально написано что последний оракловский драйвер НЕ должен работать с 7.3 версией чтоб я мог эту информацию показать заказчику и объяснить ему что он со своей идеей не прав?
Ссылки на металинк - чем не официально?
AsparovА можете конкретно как нибудь объективно объяснить почему на "чистом" JDBC API это нереально
Не то чтоб нереально. Могут быть not implemented/custom features, например работа с LOB'ами - это "оно".
...
Рейтинг: 0 / 0
Вопрос по java.sql.Clob
    #34592908
Asparov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Timm AsparovТ.е. драйвера для десятки не сертифицируются для 8ки и 7ки т.е. вполне возможна некорректная работа. Есть какая нибудь ссылка где ясно и оффициально написано что последний оракловский драйвер НЕ должен работать с 7.3 версией чтоб я мог эту информацию показать заказчику и объяснить ему что он со своей идеей не прав?
Ссылки на металинк - чем не официально?


что за ссылки на металинк?
...
Рейтинг: 0 / 0
Вопрос по java.sql.Clob
    #34592914
Фотография Timm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Asparov
2.1.1 Backward Compatibility

The JDBC drivers are certified to work with the currently supported versions of the database. ( You can find a complete up-to-date list of supported databases at http://metalink.oracle.com, Note 203849.1. ) For example, the 10g Release 1 (10.1) JDBC Thin drivers are certified to work with the 9.2.x, 9.0.1.x, and 8.1.7 database releases. The 10g Release 1 (10.1) JDBC thin drivers are not certified to work with older, unsupported database releases, such as 8.0.x and 7.x.

Т.е. драйвера для десятки не сертифицируются для 8ки и 7ки т.е. вполне возможна некорректная работа. Есть какая нибудь ссылка где ясно и оффициально написано что последний оракловский драйвер должен работать с 7.3 версией чтоб я мог эту информацию показать заказчику и объяснить ему что он со своей идеей не прав?
...
Рейтинг: 0 / 0
Вопрос по java.sql.Clob
    #34592933
Фотография Denis Popov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Asparov wrote:

> Т.е. драйвера для десятки не сертифицируются для 8ки и 7ки т.е. вполне
> возможна некорректная работа. Есть какая нибудь ссылка где ясно и
> оффициально написано что последний оракловский драйвер должен работать с
> 7.3 версией чтоб я мог эту информацию показать заказчику и объяснить ему
> что он со своей идеей не прав?

По-моему наоборот, последние JDBC-драйвера не сертифицируются и не будут сертифицироваться (т.е.
может не работать) со старыми версиями БД, и никто не обещает их корректной работы. Тем более с 7.3,
слишком давно это было.


http://www.oracle.com/technology/tech/java/sqlj_jdbc/htdocs/jdbc_faq.htm#100_00
https://metalink.oracle.com/metalink/plsql/showdoc?db=NOT&id=203849.1
https://metalink.oracle.com/metalink/plsql/showdoc?db=NOT&id=401934.1
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Вопрос по java.sql.Clob
    #34595999
Asparov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Denis Popov
Asparov wrote:

> 2)to replace oracle.sql.BLOB/CLOB with java.sql.Blob/Clob

Java декларирует интерфейсы, разработчика драйверов их реализуют. То, что ты будешь использовать в
коде java.sql.Clob вместо oracle.sql.CLOB, совсем не значит, что oracle.sql.CLOB не будет
использоваться вообще. Будет, но неявно.



Posted via ActualForum NNTP Server 1.4

Сразу не обратил внимание на неявность. А можно поподробней? При сегодняшней попытке реализовать сие получил следующее: Для коннекта к Ораклу насколько я понимаю в любом случае придется использовать оракловский драйвер и без него как я понял никак. Далее насколько я понял если я использую стандартную java.sql.* все методы, в том числе setCharacterStream() (которым я заменил getCharacterOutputStream()) проходят через драйвер Оракла и я получил ошибку

Код: plaintext
1.
2.
3.
4.
5.
6.
java.sql.SQLException: Не поддерживаемая функция
	at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java: 134 )
	at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java: 179 )
	at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java: 269 )
	at oracle.jdbc.dbaccess.DBError.throwUnsupportedFeatureSqlException(DBError.java: 690 )
	at oracle.sql.CLOB.setCharacterStream(CLOB.java: 1272 )

т.е. получается что происходит какой то конфликт между стандартным setCharacterStream() и оракловским getCharacterOutputStream(). Т.е. получается что драйвер не особо то дружит со стандартными реализациями.
Так вот, правильно ли я понял что в любом случае будет использовать oracle.sql.clob даже если у меня в классах только java.sql.clob? и насколько это может быть критично, точнее насколько они друг с другом стыкуются?


P.S. к сожалению у меня нет доступа на металинк, можно ли цитаты в этот топик из линков постом выше?

Спасибо.
...
Рейтинг: 0 / 0
Вопрос по java.sql.Clob
    #34597116
Фотография Denis Popov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AsparovСразу не обратил внимание на неявность. А можно поподробней?
Это как бы основы... Найди книжку Брюс Эккель Философия JAVA. Библиотека программиста , прочитай "Глава 8. Интерфейсы и внутренние классы".
AsparovДля коннекта к Ораклу насколько я понимаю в любом случае придется использовать оракловский драйвер и без него как я понял никак.
Да, можно лишь заметить, что теоретически к Ораклу можно ходить через JDBC-ODBC мост или JDBC-драйверы для Oracle от сторонних производителей, например . Но имхо для их использования нужны веские причины, обосновывающие невозможность использования родных драйверов.
Asparov
Код: plaintext
1.
2.
3.
4.
5.
6.
java.sql.SQLException: Не поддерживаемая функция
	at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java: 134 )
	at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java: 179 )
	at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java: 269 )
	at oracle.jdbc.dbaccess.DBError.throwUnsupportedFeatureSqlException(DBError.java: 690 )
	at oracle.sql.CLOB.setCharacterStream(CLOB.java: 1272 )

CLOB.setCharacterStream() реализован в JDBC Oracle 10.2, скачать их можно с официального сайта , до этого стояла заглушка (интерфейс-то надо было как-то реализовавать), выкидывающая исключение.
AsparovP.S. к сожалению у меня нет доступа на металинк, можно ли цитаты в этот топик из линков постом выше?
Стукнись в мою почту, адрес в профиле.
...
Рейтинг: 0 / 0
Вопрос по java.sql.Clob
    #34601650
Asparov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я стал использовать последние оракловские драйвера для 10g в которых реализованы стандартные ява методы, но столкнулся со следующей проблемой

на 'java.io.Writer out = oracleClob.setCharacterStream(0L);'

вылетает следующая ошибка

Код: plaintext
1.
java.lang.AbstractMethodError: oracle.sql.CLOB.setCharacterStream(J)Ljava/io/Writer;

из за чего она может быть вызвана? а то я что то никак не разберусь(
...
Рейтинг: 0 / 0
Вопрос по java.sql.Clob
    #34601722
Фотография Denis Popov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
http://download-uk.oracle.com/docs/cd/B19306_01/java.102/b14355/oralob.htm#sthref857
Код: plaintext
Writer out = oracleClob.setCharacterStream(1L);

Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Вопрос по java.sql.Clob
    #34601739
Фотография Timm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ищи в classpath старые версии драйвера.
тынц
...
Рейтинг: 0 / 0
Вопрос по java.sql.Clob
    #34601843
Asparov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
хм...проверил два раза, даже на всякий случай поудалял все старые драйвера полностью и заменил их на последние, эксепшн не исчезает (
...
Рейтинг: 0 / 0
Вопрос по java.sql.Clob
    #34602002
Asparov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Denis Popov
http://download-uk.oracle.com/docs/cd/B19306_01/java.102/b14355/oralob.htm#sthref857
Код: plaintext
Writer out = oracleClob.setCharacterStream(1L);
Posted via ActualForum NNTP Server 1.4

не помогло...тем более в сурцах драйвера оракла

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
    /**
     * @deprecated Method getCharacterOutputStream is deprecated
     */

     public  Writer getCharacterOutputStream()
         throws  SQLException
    {
         return  setCharacterStream(0L);
    }

т.е. getCharacterOutputStream() заменяется на setCharacterStream(0L).
...
Рейтинг: 0 / 0
Вопрос по java.sql.Clob
    #34602057
Фотография Denis Popov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тогда действительно надо разобраться с версией. Что показывает следующее?
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
    Connection con;
...   
    System.out.println("Java version: " + System.getProperty("java.version"));
    DatabaseMetaData dbMetaData = con.getMetaData();
    System.out.println("Database    : " + dbMetaData.getDatabaseProductVersion());
    System.out.println("JDBC Driver : " + dbMetaData.getDriverName() + " " + dbMetaData.getDriverVersion());

    URL url = Thread.currentThread().getContextClassLoader().getResource(
      con.getClass().getName().replaceAll("\\.", "/") + ".class"
    );
    System.out.println("Url         : " + url.getPath());
...
Рейтинг: 0 / 0
Вопрос по java.sql.Clob
    #34602101
Asparov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Denis PopovТогда действительно надо разобраться с версией. Что показывает следующее?
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
    Connection con;
...   
    System.out.println("Java version: " + System.getProperty("java.version"));
    DatabaseMetaData dbMetaData = con.getMetaData();
    System.out.println("Database    : " + dbMetaData.getDatabaseProductVersion());
    System.out.println("JDBC Driver : " + dbMetaData.getDriverName() + " " + dbMetaData.getDriverVersion());

    URL url = Thread.currentThread().getContextClassLoader().getResource(
      con.getClass().getName().replaceAll("\\.", "/") + ".class"
    );
    System.out.println("Url         : " + url.getPath());



Спасибо, разобрался с этим! данный вывод показал что использовались классы для девятки, я забыл заменить classes12.jar.
...
Рейтинг: 0 / 0
Вопрос по java.sql.Clob
    #34602316
Asparov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А вот еще в тему такой вопрос, надеюсь последний.

надо заменить метод empty_lob(); //Return a empty lob. An empty lob is used initialize a LOB column/attribute.

Насколько я понимаю это можно реализовать через SQL запросы. Можете подсказать как именно это реализовать через запросы какой нибудь примерчик или ссылочка?
Спасибо.
...
Рейтинг: 0 / 0
Вопрос по java.sql.Clob
    #34602393
Фотография Denis Popov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Насколько я знаю, если ты просто сделаешь empty_clob(), а потом попытаешься в него что-нибудь
записать, то получишь java.sql.SQLException: ORA-22275: invalid LOB locator specified. Лечится
записью его в поле таблицы и чтением LOB'а оттуда.

А еще есть процедура createTemporary() в пакете DBMS_LOB. Можно использовать ее или empty_clob(), с
упомянутой оговоркой, в своей оракловой процедуре, которую и использовать в Java.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Вопрос по java.sql.Clob
    #34602430
Asparov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Denis Popov
Насколько я знаю, если ты просто сделаешь empty_clob(), а потом попытаешься в него что-нибудь
записать, то получишь java.sql.SQLException: ORA-22275: invalid LOB locator specified. Лечится
записью его в поле таблицы и чтением LOB'а оттуда.
Posted via ActualForum NNTP Server 1.4

т.е. мне нужно создать какую нибудь таблицу в своей базе данных и в нее записать значение empty_clob(), а затем из своего приложения через селект вытягивать это значение? т.е. обязательно требуется создание заранее таблицы со значением если не использовать dbms_lob?
...
Рейтинг: 0 / 0
Вопрос по java.sql.Clob
    #34602618
Фотография Denis Popov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Asparov wrote:

> т.е. мне нужно создать какую нибудь таблицу в своей базе данных и в нее
> записать значение empty_clob(), а затем из своего приложения через
> селект вытягивать это значение?

Типа того, или в Оракле это можно сделать одним запросом:
Код: plaintext
1.
2.
3.
4.
5.
6.
CallableStatement cst = con.prepareCall(
   "begin insert into MY_TABLE (clob_field) values (empty_clob) return clob_field into ?; end;"
);
cst.registerOutParameter( 1 , Types.CLOB);
cst.execute();
clob = cst.getClob( 1 );

> т.е. обязательно требуется создание
> заранее таблицы со значением если не использовать dbms_lob?

Да.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Вопрос по java.sql.Clob
    #34605450
Asparov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
и все таки я не могу понять, допустим я имею следующий код

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
 public   int  insertBlob(String tableName, Map setSimpleColumns, Map setBlobColumns, String sequenceName, String keyField){
       
       Connection conn =  null ;
       OracleConnection oraConn =  null ;
       ResultSet rs =  null ;
       PreparedStatement ps =  null ;
        int  keyId =  0 ;
        try  {
           conn = getConnection();
           conn.setAutoCommit(false);
           keyId = NextIDSequence(conn, sequenceName);
           
           setSimpleColumns.put(keyField, new  Integer(keyId));
           
           Iterator it = setBlobColumns.keySet().iterator();
           String key="";
           Object value;
            while  (it.hasNext()) {
               key = (String) it.next();
                if  (setBlobColumns.get(key)  instanceof   byte []){
                    if  (getDbType()==DBTypes.NORACLE){
                       BLOB oracleBlob = BLOB.empty_lob();
                       value=oracleBlob;
                   } else {
                       value= new  BytesStore(( byte []) setBlobColumns.get(key));
                   }
               } else {
                    if  (getDbType()==DBTypes.NORACLE){
                       value="BLOB";
                   } else {
                       value=(String) setBlobColumns.get(key);
                   }
               }
               setSimpleColumns.put(key, value );
                break ;
           }

           String insertSql=SimpleStmtBuilder.buildInsertStmt(tableName,setSimpleColumns,true);
           
           ps = conn.prepareStatement(insertSql);
            int  i= 1 ;
           
           it = setSimpleColumns.keySet().iterator();
           String key2="";
            while  (it.hasNext()) {
               key2= (String) it.next();
                if  (setSimpleColumns.get(key2)  instanceof  Integer){
                   ps.setInt(i,((Integer)setSimpleColumns.get(key2)).intValue());
               } else   if  (setSimpleColumns.get(key2)  instanceof  String){
                   ps.setString(i,(String) setSimpleColumns.get(key2));
               } else   if  (setSimpleColumns.get(key2)  instanceof  Timestamp){
                   ps.setTimestamp(i,(Timestamp) setSimpleColumns.get(key2));
               } else   if  (setSimpleColumns.get(key2)  instanceof  BytesStore){
                   ps.setBytes(i,((BytesStore) setSimpleColumns.get(key2)).getBytes());
               } else {
                   ps.setObject(i,setSimpleColumns.get(key2));
               }
               i++;
           }
           
           ps.executeUpdate();
           ...........
       }


то есть идет условие что если байты и оракл то BLOB oracleBlob = BLOB.empty_lob(); value=oracleBlob; иначе если стринги и оракла то value="BLOB"; Я не могу понять почему в первом случае создается пустой блоб для валуе а во втором стринговая переменная 'BLOB'
Может быть можно сделать вместо BLOB oracleBlob = BLOB.empty_lob(); value=oracleBlob; =>>
value=new BytesStore((byte[])"BLOB".getBytes());
...
Рейтинг: 0 / 0
Вопрос по java.sql.Clob
    #34605585
Фотография Denis Popov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ты про это?
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
//BLOB.empty_lob() - deprecated.
//BLOB oracleBlob = BLOB.empty_lob();
BLOB oracleBlob = BLOB.createTemporary(con, true, BLOB.DURATION_SESSION);
OutputStream out = blob.setBinaryStream( 1 );
out.write(( byte []) setBlobColumns.get(key));
out.close();
value = oracleBlob;
Посмотри примеры работы с LOB'ами: http://www.oracle.com/technology/sample_code/tech/java/sqlj_jdbc/files/advanced/advanced.html
...
Рейтинг: 0 / 0
Вопрос по java.sql.Clob
    #34605675
Asparov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Denis PopovТы про это?
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
//BLOB.empty_lob() - deprecated.
//BLOB oracleBlob = BLOB.empty_lob();
BLOB oracleBlob = BLOB.createTemporary(con, true, BLOB.DURATION_SESSION);
OutputStream out = blob.setBinaryStream( 1 );
out.write(( byte []) setBlobColumns.get(key));
out.close();
value = oracleBlob;
Посмотри примеры работы с LOB'ами: http://www.oracle.com/technology/sample_code/tech/java/sqlj_jdbc/files/advanced/advanced.html

нет, я не про это, мне бы без использования BLOB оракловского а только с Blob джавовским, я просто не понимаю зачем он там вообще создается BLOB blob = new BLOB.empty_lob(); может там можно как то без создания пустого блоба обойтись т.к. если данные поступают в стринг формати никакой пустой блоб не создается, он создается только если данные в байтах поступают. или это у меня в коде какая то бага?
...
Рейтинг: 0 / 0
Вопрос по java.sql.Clob
    #34605699
Фотография Denis Popov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Asparov wrote:

> нет, я не про это, мне бы без использования BLOB оракловского а только с
> Blob джавовским, я просто не понимаю зачем он там вообще создается BLOB
> blob = new BLOB.empty_lob(); может там можно как то без создания пустого
> блоба обойтись

Уже было: /topic/440063&pg=1#4262274
Напиши свой класс, реализующий интерфейс Blob и используй его в своем коде вместо оаклового.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
49 сообщений из 49, показаны все 2 страниц
Форумы / Java [игнор отключен] [закрыт для гостей] / Вопрос по java.sql.Clob
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]