|
|
|
JDBC+Oracle(Parameters)
|
|||
|---|---|---|---|
|
#18+
Petro123Нет именованных, но зато компактность кода для 30 параметров. Согласен, но это похоже, только если типы простые совсем типа строка и целое число. Буду приводить все к строковым параметрам в хп :( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.04.2016, 18:08 |
|
||
|
JDBC+Oracle(Parameters)
|
|||
|---|---|---|---|
|
#18+
Leonid Kudryavtsev, насчет анонимного блока прояснило суть почему не определить тип. Других вариантов в ojdbc нет? ) Не ясно зачем тогда вообще ParameterMetaData. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.04.2016, 18:11 |
|
||
|
JDBC+Oracle(Parameters)
|
|||
|---|---|---|---|
|
#18+
авторПоэтому остается: - или все параметры хранимки делать строковыми и уже в самой хранимке приводить к нужному типу для вставки в таблицы - пытаться определить тип косвенно по формату строки - или хардкодить по всем полям строковые от не строковых для ...prepareCall("{call proc_name("+param1_name+"," + param1_name+")}"); будут отличаться только наличием кавычек можешь выбрать все строковые из твоих входных, добавить одинарные кавычки в начале и в конце, слить в строку и скормить ...prepareCall("{call proc_name("+набор_параметров+")}"); ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.04.2016, 18:13 |
|
||
|
JDBC+Oracle(Parameters)
|
|||
|---|---|---|---|
|
#18+
JDSPetro123Нет именованных, но зато компактность кода для 30 параметров. Согласен, но это похоже, только если типы простые совсем типа строка и целое число. Буду приводить все к строковым параметрам в хп :( Ты не прав и тебе лень дать поиск соответствий ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.04.2016, 18:22 |
|
||
|
JDBC+Oracle(Parameters)
|
|||
|---|---|---|---|
|
#18+
вадя, Он хочет в хранимке все парам строками. Даже даты. А так нельзя. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.04.2016, 18:24 |
|
||
|
JDBC+Oracle(Parameters)
|
|||
|---|---|---|---|
|
#18+
Petro123Он хочет в хранимке все парам строками. Даже даты. А так нельзя. Допустим, в xml дата: 2007-03-16T14:15:15.743 Если бы мог доставать тип параметра из хранимки, то мог явно преобразовать к дате или там таймстэмпу или еще как, а просто setObject что-то для данной строки не лезет в поле даты :/ Кстати еще ж вариант брать типы параметров хранимок из словаря БД ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.04.2016, 18:33 |
|
||
|
JDBC+Oracle(Parameters)
|
|||
|---|---|---|---|
|
#18+
JDSДругих вариантов в ojdbc нет? Вариантов чего? Если: JDSраспознавать типы параметров хранимки, чтобы явно преобразовывать параметры к нужному типу В Oracle это делается без проблем и без всякого ParameterMetaData. См. представления Oracle. Для public процедур (а что бы вызвать, она должна быть public) все параметры описаны в соответствующих представлениях. Кроме того, пишут, что через Connection.getMetaData() можно получить метаданные для БД и уже оттуда, через getProcedures и getProcedureColumns получить типы параметров. JDSНе ясно зачем тогда вообще ParameterMetaData. Наверное, что бы их можно было получить, если типы параметров известны ))) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.04.2016, 18:33 |
|
||
|
JDBC+Oracle(Parameters)
|
|||
|---|---|---|---|
|
#18+
Leonid Kudryavtsevвсе параметры описаны в соответствующих представлениях Об этом уже подумал выше. Но это как-то жестоко все-таки ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.04.2016, 18:43 |
|
||
|
JDBC+Oracle(Parameters)
|
|||
|---|---|---|---|
|
#18+
JDSОб этом уже подумал выше. Но это как-то жестоко все-таки Почему. Нормальный, документированный способ для работы с Oracle. Другие СУБД, обычно, тоже метаописания имеют. Если хочется удалять гланды через жопу быть true java программистом - можно через Connection.getMetaData() ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.04.2016, 18:48 |
|
||
|
JDBC+Oracle(Parameters)
|
|||
|---|---|---|---|
|
#18+
JDS, SetObj не работае с датами? Стек ошибки дай. Завтра проверю ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.04.2016, 18:49 |
|
||
|
JDBC+Oracle(Parameters)
|
|||
|---|---|---|---|
|
#18+
Leonid KudryavtsevПочему. Нормальный, документированный способ для работы с Oracle. После тех же делфей это уже геморройный способ ) Сделали бы при вызове prepareCall, чтобы он в стейтменте собирал инфу и о параметрах все-таки, было бы замечательно ) Petro123SetObj не работае с датами? Стек ошибки дай. Завтра проверю Суть, в поле даты xml файла пишем например 2007-03-16T14:15:15.743 Ну и подаем это через setObj в параметр типа дата - не явное преобразование не проходит конечно: Код: plsql 1. В timestamp тоже не лезет однако ): Код: plsql 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.04.2016, 19:14 |
|
||
|
JDBC+Oracle(Parameters)
|
|||
|---|---|---|---|
|
#18+
JDSСуть, в поле даты xml файла пишем например 2007-03-16T14:15:15.743 Ну и подаем это через setObj в параметр типа дата - не явное преобразование не проходит конечно: Ты так и не понял что ли? Какие нафиг в Java неявные преобразования? Драйвер определяет тип по типу класса. Значит в SetObject нужно передать класс Даты а не Класс строка. Неужели не понятно? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.04.2016, 19:35 |
|
||
|
JDBC+Oracle(Parameters)
|
|||
|---|---|---|---|
|
#18+
Код: java 1. 2. 3. 4. 5. 6. почти 4 строки кода. Что не работает? Парсер XML любыми способами готовит массив или коллекцию. Не должен Java код бизнес уровня быть замусорен техническим кодом уровня СУБД. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.04.2016, 19:41 |
|
||
|
JDBC+Oracle(Parameters)
|
|||
|---|---|---|---|
|
#18+
Petro123Драйвер определяет тип по типу класса. Значит в SetObject нужно передать класс Даты а не Класс строка. Это уже лучше и даже здорово, но тогда снова возвращаемся к тому с чего начали: определение типа параметра :) И если так, то выход один значит: юзать словарь БД. При этом сейчас наткнулся на вообще странное поведение - параметры, не смотря на то, что заданы четко в соответствии именам и порядок их следования в объявлении стейтмента четко соответствует порядку в ХП, приходят они в ХП вообще наперекосяк перепутавшись местами ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.04.2016, 19:41 |
|
||
|
JDBC+Oracle(Parameters)
|
|||
|---|---|---|---|
|
#18+
JDSЭто уже лучше и даже здорово, но тогда снова возвращаемся к тому с чего начали: определение типа параметра :) нет. Из XML ты должен знать что приходит и трансформировать в объекты типа. Иначе заливай строку XML одной строкой. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.04.2016, 19:44 |
|
||
|
JDBC+Oracle(Parameters)
|
|||
|---|---|---|---|
|
#18+
Попробовал указать явно все параметры таким макаром: Код: plsql 1. Нипамагает. Все равно в ХП значения приходят наперекосяк. Печаль ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.04.2016, 19:46 |
|
||
|
JDBC+Oracle(Parameters)
|
|||
|---|---|---|---|
|
#18+
JDS, я тебя понял. Ты от ленности максимально оттягиваешь момент разбора мусора в XML для заливки в БД. Имена полей и типы полей известны на момент разработки. И никак иначе. Просто чтобы дважды не писать длинный код ты валидируешь XML парам. самим парсером, а в БД тип заливается автоматом. Ты же пытаешься в рантайме определить не только тип поля из XML, но и залить его в зависимости от типа серверного программиста. Так не бывает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.04.2016, 19:48 |
|
||
|
JDBC+Oracle(Parameters)
|
|||
|---|---|---|---|
|
#18+
JDSНипамагает ну тогда только мой вариант в 4 строки. И не ленись парсить XML по настоящему. Удачи! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.04.2016, 19:49 |
|
||
|
JDBC+Oracle(Parameters)
|
|||
|---|---|---|---|
|
#18+
Petro123Из XML ты должен знать что приходит и трансформировать в объекты типа. Не улавливаю. Тогда получается, мне надо обработать каждое поле. Хотел так: 1. Есть xml c известными полями (при этом определенных тегов для разных сущностей может и не быть) 2. Согласно сущностям xml делаем хранимки в БД, так чтобы имена параметров совпадали с именами тегов (благо имена позволяют) 3. Читаем тег, по его имени достаем параметр хранимки, по этому параметру определяем какого он типа, приводим к этому типу и засовываем значение тега в значение параметра (как ты говоришь, уже трансформированное в нужный тип/класс) Попробую сделать вариант такой, и наверно это имеется в виду: 1. для сущности в xml создается соответствующий класс в яве с полями соответствующих типов. 2. читаем xml в этот класс 3. переливаем в параметры стейтмента поля нашего класса ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.04.2016, 19:56 |
|
||
|
JDBC+Oracle(Parameters)
|
|||
|---|---|---|---|
|
#18+
JDSPetro123Из XML ты должен знать что приходит и трансформировать в объекты типа. Не улавливаю. Тогда получается, мне надо обработать каждое поле. Хотел так: 1. Есть xml c известными полями (при этом определенных тегов для разных сущностей может и не быть) == да 2. Согласно сущностям xml делаем хранимки в БД, так чтобы имена параметров совпадали с именами тегов (благо имена позволяют) === почти. Можно и однаХПнаОднуXML_Накладная 3. Читаем тег, по его имени достаем параметр хранимки, по этому параметру определяем какого он типа, === да. Валидация обязательна т.к. это общение 2-х ИС между собой. И версию ещё внутрь XML засунуть. приводим к этому типу и засовываем значение тега в значение параметра (как ты говоришь, уже трансформированное в нужный тип/класс === да. Тут как удобней при заливке. Я простым линейным списком статического массива делал. Т.к. insert в одну таблу сразу ) Попробую сделать вариант такой, и наверно это имеется в виду: 1. для сущности в xml создается соответствующий класс в яве с полями соответствующих типов. 2. читаем xml в этот класс 3. переливаем в параметры стейтмента поля нашего класса ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.04.2016, 20:06 |
|
||
|
JDBC+Oracle(Parameters)
|
|||
|---|---|---|---|
|
#18+
JDS1. для сущности в xml создается соответствующий класс в яве с полями соответствующих типов. если есть автомат для этого дела, то я за. Но я думаю, понадобится маппинг или DTD схема или .... В общем тут поправят, но нужны простые классы для отрибутов. Я читал ноды XML руками и мне легко было читать дату ДатаРождения и я знал что это дата)))) LOL ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.04.2016, 20:10 |
|
||
|
JDBC+Oracle(Parameters)
|
|||
|---|---|---|---|
|
#18+
Petro123Я читал ноды XML руками и мне легко было читать дату ДатаРождения и я знал что это дата)))) LOL Если xml сложный, содержит много сущностей для разных таблиц, с зависимостями, глубоким деревом, кучей тегов, которые могут пропускаться, если нет значения, то ладно еще в БД прописать куда что раскладывать, но когда это же еще надо и в яве прописывать, по-моему это уже не рационально: ты же прописал все в БД, то есть у тебя есть уже типы параметров(полей), вот их достаешь (придется из словаря все же видимо) и дальше уже просто по имени тега сопоставляешь, не перебирая в яве, типа если это такое поле, то это поле даты, если такое, то это число и т.д. И я сначала так и подумал, что setObject чудесным образом сам все поймет и преобразует к нужному типу ))) В общем ясно. Но возникает вопрос, есть в яве возможность индексировать массив строковыми ключами? ) То есть ну создал ты массив, где явно прописал: такое-то поле преобразуем к такому-то типу, такое-то к такому, но потом бегать по всему массиву, выискивая по имени тега нужный параметр совсем не норма имхо. Или например есть ли возможность обратиться к полю класса динамически задавая имя поля? Типа как в js можно обращаться например не Код: javascript 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.04.2016, 22:14 |
|
||
|
JDBC+Oracle(Parameters)
|
|||
|---|---|---|---|
|
#18+
Просто если это реализовать, то парсер получится маленький, практически универсальный и довольно шустрый. По-моему наоборот, в части загрузки того же xml явой не должно быть здесь никакой бизнес-логики - просто утилита загрузки и ничего более, транзит, а вот уже в базе все и разруливается куда что класть. Больше того, в базе по-любому же придется прописывать все поля и типы. Не уверен, что имеет смысл все это дублировать в яве ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.04.2016, 22:22 |
|
||
|
JDBC+Oracle(Parameters)
|
|||
|---|---|---|---|
|
#18+
JDSа вот уже в базе все и разруливается куда что класть тебя тут не поймут. На каком ЯП в базе разруливать. Приведи пример. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.04.2016, 22:35 |
|
||
|
JDBC+Oracle(Parameters)
|
|||
|---|---|---|---|
|
#18+
JDS, так что ли? Код: 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. 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. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.04.2016, 22:40 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=39209648&tid=2124169]: |
0ms |
get settings: |
6ms |
get forum list: |
11ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
140ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
62ms |
get tp. blocked users: |
2ms |
| others: | 208ms |
| total: | 445ms |

| 0 / 0 |
