|
Java & Oracle & stored proc
|
|||
---|---|---|---|
#18+
Хотелось бы услышать мнение по следующей проблеме: есть СУБД Oracle и соответственно клиента на Java. Клиент вызывает некоторые хранимые процедуры по вставке/обновлению/удалению записей. Хранимые процедуры естественно имеют некоторые параметры; так вот есть идея передавать с клиента не набор некоторых пераметров, а цельный объект описывающий некоторую сущность и имеющий некоторые свойства и методы. Хранимая процедура в этом случае имела бы возможность посредством вызова методов объекта получать доступ к значениям его полей В идеале, по моему мнению, такое решение могло бы помочь "мягко" синхронизировать изменения клиентской и серверной частей приложения - изменяем только те поля, для которых определены методы get/set (используется не тонкий клиент, пишется именно приложение) Кроме того улучшается читабельность и сопровождаемость кода (листинг процедуры перестает представлять собой "хвостатого монстра") Только не сочтите это "тихим помешательством" на почве ООП - у меня реально встала проблема сопровождения хранимых процедур с большим количеством параметров: много времени тратится просто на то, чтобы например понять, где заканчивается определение процедуры и начинается ее реализация ... |
|||
:
Нравится:
Не нравится:
|
|||
12.03.2004, 17:44 |
|
Java & Oracle & stored proc
|
|||
---|---|---|---|
#18+
Мысли вслух: есть объектный тип Oracle. Оракловая процедура принимает его в качестве аргумента вместо множества атрибутов, т.е. объектный тип инкапсулирует в себе все требуемые атрибуты. Хотелось бы, чтобы и Java-классы оперировали данной структурой, причем обращаясь к атрибутам поименно, а не по порядковому номеру, например. На мой взгляд, можно воспользоваться механизмом, описанным в статье про Oracle Advanced Queuing , а именно использовать JPublisher для создания Java-класса по оракловому объектному типу. В дальнейшем обмениваться данными Oracle<->Java посредством его, а внутри все это неявно будет использовать OracleTypes.STRUCT. Выгода такого подхода ИМХО в возможности обращения к соотсветствующим методам класса для изменения атрибутов, вместо работы с OracleTypes.STRUCT: получаем структуру, изменяем требуемые поля, отдаем обратно. При изменении ораклового объектного типа производится повторный вызов JPublisher'а. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.03.2004, 18:45 |
|
Java & Oracle & stored proc
|
|||
---|---|---|---|
#18+
thank's to Denis Popov - обязательно посмотрю доку, может что то стояще придумается Тут я вчера еще раз внимательно просматривал Java Developer’s Guide от Oracle и обнаружил такую вещь: для REF параметром определены не только методы getXXX но и setXXX; правда тут же возникают вопросы: 1) Если я получаю в виде REF значения из хранимой процедуры ссылку на курсор типа "данные таблицы", то получается, что и возвращать мне придется параметр того же типа, только измененый на стороне клиента? 2) Или не придется? А можно ли вернуть "что-то"%ROWTYPE? А как тогда такой тип получить на стороне клиента? ... |
|||
:
Нравится:
Не нравится:
|
|||
13.03.2004, 10:39 |
|
Java & Oracle & stored proc
|
|||
---|---|---|---|
#18+
А что именно подразумевается про REF-параметр и методы get и set, можжно ссылку? Или ты про возврат из оракловых процедур параметров типа sys_refcursor и работу с ними через java.sql.ResultSet на стороне Java-клиента? По-моему можно и в данном случае свести все к объектным типам 1. Создается объектный тип. 2. Создаеться объектная таблица этого типа. 3. Процедура, вместо возврата sys_refcursor'а возвращает объектную таблицу. 4. Для Java она представима как oracle.sql.ARRAY, каждая запись которой - это oracle.sql.STRUCT, далее варианты: а) у ARRAY есть метод getResultSet(), хотя тогда встает вопрос, зачем это все; б) работаешь напрямую со STRUCT; в) используешь для работы со STRUCT полученный через JPublisher класс. Навороченно как-то получается: для каждого курсора, возвращаемого из Oracle, надо как минимум описать объектный тип, объектную таблицу; но может в этом и есть сущность объектного подхода:) ... |
|||
:
Нравится:
Не нравится:
|
|||
15.03.2004, 10:36 |
|
|
start [/forum/topic.php?fid=59&fpage=852&tid=2154278]: |
0ms |
get settings: |
11ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
106ms |
get topic data: |
42ms |
get forum data: |
3ms |
get page messages: |
74ms |
get tp. blocked users: |
2ms |
others: | 277ms |
total: | 538ms |
0 / 0 |