|
Передача Array в качестве параметра
|
|||
---|---|---|---|
#18+
Leonid KudryavtsevРазделить код который хочется "код НЕ (!!!) только в базе" и код интерфейся/обертки для вызова из БД Отделить код бизнес-логики от интерфейсов/обертки для его вызова из "специфических" мест Если я верно Вас понял, необходимо создать спец. метода для общения с базой Архитектура следующая Запуск из Java приложения - приложение -> конструктор класса -> Основной метод (Static) Запуск из базы - обертка PL/SQL -> метод Export (Static) -> Основной метод (Static) Такая реализация существует. Это не существенно, но в продукт. версии необходимо передать/принять порядка 60 параметров для каждой функции, исходный код становиться "ТОЛСТЫМ" и неприятным. Когда задавал вопрос, предполагал что писать/читать тип Array не проблематично, и это можно решить простым циклом. Спасибо за совет - обдумаю ..... ... |
|||
:
Нравится:
Не нравится:
|
|||
22.11.2018, 22:52 |
|
Передача Array в качестве параметра
|
|||
---|---|---|---|
#18+
Просто обычно, лично я, всегда начинаю с другого конца. Бизнес логика + проверка/отладка в pure java проекте ==> подключение к работающей системе (сопряжение с СУБД) Ранее на протяжении 10+ лет работал как low level программер для "помощи" коллегам которые приложения на FoxPro,Access,Oracle Forms etc...etc... делали. Соответственно залезать в бизнес-приложение предпочитал на самом последнем шаге. Или вообще не залезать. Сделал свой кусок на C / Java, отладил отдельно от бизнес-приложения, написал "обертку", а к кнопкам/меню и прочее - уже коллеги знающие бизнес-приложения подключают. Это не существенно, но в продукт. версии необходимо передать/принять порядка 60 параметров для каждой функции IMHO 60 параметров, это жесть какая-то Если это какие-то параметры одного-двух бизнес объектов, то оберните их в какой нибудь класс. Благо Oracle (другие СУБД такой возможности могут не иметь) вполне поддерживает сложные типы и, вроде (сам с этим плотно не работал) маппинг object типа в class java (JPublisher) В приложении заполнили объект с 60 полями, в_функцию/из_функции его передаете единым целым IMHO лично я бы как-то так делал предполагал что писать/читать тип Array не проблематично да, в принципе, может и можно... но лично мне такое решение бы не нравилось ты не хочешь менять вызываемые ф-ции, но все равно нужно будет менять вызывающую ф-цию (вкорячивать туда поддержку самописных Array'ев) - т.е. чисто визуально, кол-во работы остается ровно таким-же. А код продолжает "толстеть и неприятнеть" У тебя сейчас неприятный "основной метод" (60 параметров - это жесть), что бы его не переписывать, ты собираешся сделать неприятным "приложение Java". Т.е. толстость и неприятность в рамках всего проекта будет только возрастать. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.11.2018, 15:30 |
|
Передача Array в качестве параметра
|
|||
---|---|---|---|
#18+
Denis PopovК примеру: http://tech.valgog.com/2009/02/passing-arrays-to-postgresql-database.html Доброго дня Denis Попытался реализовать Ваш пример. Рекомендованный по ссылке класс взят в оригинале - спасибо работает нормально. (в коде ниже взят набор переменных для комплексности и проверки работоспособности) Код: java 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.
Здесь не совсем понял - как правильно привести классы PL/SQL (FDNBI = table of number) и Analitic.PostgreSQLInt4Array Или момент приведения вложить в Java - коде ? Подскажите пожалуйста. Код: plsql 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.
... |
|||
:
Нравится:
Не нравится:
|
|||
24.11.2018, 18:36 |
|
Передача Array в качестве параметра
|
|||
---|---|---|---|
#18+
HOME_X, т.е. ты хочешь написать метод java-класса, который будет принимать параметр типа java.sql.Array, причем класс должен работать как вне базы, так и загруженным в нее? ... |
|||
:
Нравится:
Не нравится:
|
|||
27.11.2018, 10:58 |
|
Передача Array в качестве параметра
|
|||
---|---|---|---|
#18+
Denis PopovHOME_X, т.е. ты хочешь написать метод java-класса, который будет принимать параметр типа java.sql.Array, причем класс должен работать как вне базы, так и загруженным в нее? Вы правильно поняли. Разбор класса Array должен осуществляться на уровне инициирующих запуск приложений. Ну так хотелось бы. java.sql.Array - насколько понял совместим с "table of number" и проблем не было Вероятно надо описать в PL/SQL пользовательский тип связанный с java - классом Сейчас буду пробывать. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.11.2018, 11:24 |
|
Передача Array в качестве параметра
|
|||
---|---|---|---|
#18+
HOME_XНу так хотелось бы. java.sql.Array - насколько понял совместим с "table of number" и проблем не было Боюсь, не пройдет. Все примеры возврата Array из хранимой java-процедуры требуют привязки в оракловому объектному типу. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.11.2018, 15:30 |
|
Передача Array в качестве параметра
|
|||
---|---|---|---|
#18+
Denis Popovпривязки в оракловому объектному типу. Да, уместно предположить что в момент createOracleArray идет считывание длины типа Array array = con.createOracleArray("SYS.ODCINUMBERLIST", intValues); так как это польз. тип и может иметь разную длину. В моем случае тип фиксирован = oracle.sql.NUMBER (table of number) Возможно ли создать тип искусственно (или "замерять" длину "table of number") и привести его к (ARRAY) Или как-то "подсмотреть"/декомпилировать содержание процедуры createOracleArray Или это фантазия ..? Спасибо ... |
|||
:
Нравится:
Не нравится:
|
|||
07.12.2018, 12:18 |
|
|
start [/forum/topic.php?fid=59&msg=39739193&tid=2121613]: |
0ms |
get settings: |
7ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
54ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
44ms |
get tp. blocked users: |
1ms |
others: | 326ms |
total: | 462ms |
0 / 0 |