|
|
|
JDBC+Oracle(Parameters)
|
|||
|---|---|---|---|
|
#18+
ilych2000Результат выпонения: Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. Вот так! Драва: ojbc6.jar Implementation-Version: 11.2.0.2.0 Java 1.6 По-моему методы setXXX() в текущей реализации просто присваивают параметры по порядку, и то, что первым аргументом можно передать строку, а не число, это какой-то неподдерживаемый сюрприз. Попробуй туда передать несуществующий параметр, например: Код: java 1. 2. и оно все равно работает. А для поименного привязывания в оракловом драйвере есть методы setXXXAtName, да только нет метода registerOutputParameterAtName(). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.03.2012, 10:45 |
|
||
|
JDBC+Oracle(Parameters)
|
|||
|---|---|---|---|
|
#18+
ilych2000Причем тексты PSQL хранятся на серваке в блобах и могут написаны как угодно, но выполняются, в толстом клиенте и PLSQLDevelopere. И они должны вызываться из Java без изменений. Вау-у-у! Про функции и процедуры с параметрами в базах данных ничего не слышали? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.03.2012, 10:47 |
|
||
|
JDBC+Oracle(Parameters)
|
|||
|---|---|---|---|
|
#18+
Denis Popov, Вы правы для хранимок Для селектов все работает как надо - нужны правильные имена ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.03.2012, 10:51 |
|
||
|
JDBC+Oracle(Parameters)
|
|||
|---|---|---|---|
|
#18+
Garrick, Анонимные процедуры хранятся в блобах или формируются непосредственно в коде. Клиент представляет собой инструмент не предоставляющий пользователю возможность создавать в БД функции или процедуры. Это как система управления сайтом (CMS) не создает файлы контента на сайте, а хранит их в БД. В общем суть проста в части выполнения селектов драва правильно работуют с именованными параметрами, а в части процедур просто заимплементили java.sql.CallableStatement setString(String parameterName, String x) на бинд тупо по порядку следования параметров в процедуре. Такое поведение не описано в доках. Считаю это багом. И дровам в этом месте надо выдавать SQLFeatureNotSupportedException так как так и есть, а не пудрить мозг программистам. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.03.2012, 11:03 |
|
||
|
JDBC+Oracle(Parameters)
|
|||
|---|---|---|---|
|
#18+
ilych2000Denis Popov, Вы правы для хранимок Для селектов все работает как надо - нужны правильные имена А у меня работает... Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. Код: plaintext 1. Правда, еесли заменить на OraclePreparedStatement, то у него метода st.setString(String, String) нет. Код: plaintext 1. 2. 3. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.03.2012, 11:07 |
|
||
|
JDBC+Oracle(Parameters)
|
|||
|---|---|---|---|
|
#18+
ilych2000Клиент представляет собой инструмент не предоставляющий пользователю возможность создавать в БД функции или процедуры. ===== ну дак пишите на Delphi или Java :) Зачем вам PSQL? Это как система управления сайтом (CMS) не создает файлы контента на сайте, а хранит их в БД. ===== не путай ядро ИС с USER-контентом cms ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.03.2012, 11:14 |
|
||
|
JDBC+Oracle(Parameters)
|
|||
|---|---|---|---|
|
#18+
Denis Popov, Перефразирую В общем суть проста в части выполнения PreparedStatement драва правильно работуют с именованными параметрами, а в части CallableStatement просто заимплементили java.sql.CallableStatement setString(String parameterName, String x) на бинд тупо по порядку следования параметров в процедуре. Такое поведение не описано в доках. Считаю это багом. И дровам в этом месте надо выдавать SQLFeatureNotSupportedException так как так и есть, а не пудрить мозг программистам. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.03.2012, 11:22 |
|
||
|
JDBC+Oracle(Parameters)
|
|||
|---|---|---|---|
|
#18+
Апну, ибо не нашел. Говорит: Попытка присвоения имени параметра, которое не встречается в данном SQL: param1 При том, что параметр с именем "param1" в процедуре точно есть. Пробовал менять регистр, пробовал вместо CallableStatement, PreparedStatement: ругаецо на класс, типа не может преобразовать PreparedStatement в CallableStatement. ojdbc6, ora11.2. При обращении по индексу работает нормально, но надо по именам параметров. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.04.2016, 14:26 |
|
||
|
JDBC+Oracle(Parameters)
|
|||
|---|---|---|---|
|
#18+
Код: java 1. 2. 3. 4. Говорит, что поддерживаются. Есть подозрение, что должен соблюдаться порядок следования этих параметров. То есть если задаем первый параметр, для стейтмента, то даже обращаясь по имени, он и в параметрах хранимки в БД тоже должен быть первым. Видимо об этом и речь в топике. Но это ж косяк как-то. Смысл тогда в таких параметрах. Как использовать PreparedStatement вместо CallableStatement пока не понял :( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.04.2016, 14:33 |
|
||
|
JDBC+Oracle(Parameters)
|
|||
|---|---|---|---|
|
#18+
Есть подозрение, что должен соблюдаться порядок следования этих параметров. Подозрение не подтвердилось. В чем засада не ясно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.04.2016, 14:37 |
|
||
|
JDBC+Oracle(Parameters)
|
|||
|---|---|---|---|
|
#18+
JDSПодозрение не подтвердилось. В чем засада не ясно.нету Java именованных параметров. Т.к. мало челов пишут на голом JDBC imho ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.04.2016, 15:12 |
|
||
|
JDBC+Oracle(Parameters)
|
|||
|---|---|---|---|
|
#18+
JDS, побуду буквоедом, но тут ошибка: NAMED PARAMETERS FOR CALLABLE STATEMENTS IS SUPPORTED во множественном числе ARE сорри ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.04.2016, 15:12 |
|
||
|
JDBC+Oracle(Parameters)
|
|||
|---|---|---|---|
|
#18+
Petro123нету Java именованных параметров. Т.к. мало челов пишут на голом JDBC imho Это было бы просто дико, особенно учитывая, что в спецификации setString/Int/...itc есть возможность обращаться не только по индексу, но и по имени. Без этого jdbc превращается в суровый хардкод инструмент же ) И больше того, у меня похоже, все-таки получилось: надо когда пишешь фукнцию в колблстейтмент параметры писать не вопросиками, а именами с двоеточием типа: Код: java 1. тогда вроде нормуль. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.04.2016, 15:24 |
|
||
|
JDBC+Oracle(Parameters)
|
|||
|---|---|---|---|
|
#18+
lor2побуду буквоедом, но тут ошибка Мопед не мой ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.04.2016, 15:26 |
|
||
|
JDBC+Oracle(Parameters)
|
|||
|---|---|---|---|
|
#18+
JDSтогда вроде нормуль. попробуешь отпишись. Я свой переделаю под имена. НО! Должен работать .SetObject! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.04.2016, 15:27 |
|
||
|
JDBC+Oracle(Parameters)
|
|||
|---|---|---|---|
|
#18+
Не понимаю чего тут не понятного. Классический вариант заполнения параметров в запросе JDBC выглядит следующим образом Код: plsql 1. 2. 3. 4. 5. Т.е. знаки вопросов в строке запроса и последовательно с соблюдением порядка следования "вопросов" заполнение параметров. Но в JDBC от Oracle (возможно и другие) есть возможность использовать, т.н. именованные параметры. Выглядит это примерно так: Код: plsql 1. 2. Т.е. вместо вопросов указываем имена параметров, предваряя их двоеточием. Заполняем параметры по имени с использованием методов setXXXAtName(), порядок следования не важен. Binding by name is not supported when using the setXXX methods. Under certain circumstances, previous versions of Oracle JDBC drivers have allowed binding statement variables by name when using the setXXX methods.... Starting from Oracle Database 10g JDBC drivers, bind by name is supported using the setXXXAtName methods. тут Аналогичная штука с именованными параметрами есть в Spring JDBCTemplate. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.04.2016, 16:53 |
|
||
|
JDBC+Oracle(Parameters)
|
|||
|---|---|---|---|
|
#18+
можно и так Код: java 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.04.2016, 17:03 |
|
||
|
JDBC+Oracle(Parameters)
|
|||
|---|---|---|---|
|
#18+
GarrickНо в JDBC от Oracle (возможно и другие) есть возможность использовать, т.н. именованные параметры. Выглядит это примерно так: Если на входе Null то будет raise ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.04.2016, 17:07 |
|
||
|
JDBC+Oracle(Parameters)
|
|||
|---|---|---|---|
|
#18+
Garrickp.setIntAtName кроме того, сам код)) не в состоянии тип определить? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.04.2016, 17:09 |
|
||
|
JDBC+Oracle(Parameters)
|
|||
|---|---|---|---|
|
#18+
Garrick, в Delphi так p.ParamByName(цццццц).выбирай_далее_что_угодно ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.04.2016, 17:11 |
|
||
|
JDBC+Oracle(Parameters)
|
|||
|---|---|---|---|
|
#18+
Petro123попробуешь отпишись Попробовал: 1. работает конечно, можно обращаться по именам не важно в каком порядке 2. все-таки надо прежде сначала все проиницилизировать именно потому, что: Petro123Если на входе Null то будет raise Надо проверить, но думаю не совсем так. Точнее наверно будет: если параметр не проинициализирован, то будет райс. Т.е. сначала можно проинициализировать все параметры например пустым значением, потом уже заполнять, существующие. 3. С типами все-таки беда, setObject в большинстве случаев преобразует в строку и вызов ломается. Сделал все входные параметры процедуры строковыми, заработало, но тогда придется в самой хранимке уже преобразовывать, для вставки в поля таблиц. Геморрой короче. Но видимо, еще сами данные такие, что фиг преобразуешь толком. Плюс еще CLOB-ы предвидятся ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.04.2016, 17:19 |
|
||
|
JDBC+Oracle(Parameters)
|
|||
|---|---|---|---|
|
#18+
JDS...С типами все-таки беда, setObject в большинстве случаев преобразует в строку и вызов ломается. Сделал все входные параметры процедуры строковыми, заработало, но тогда придется в самой хранимке уже преобразовывать, для вставки в поля таблиц. Геморрой короче. Но видимо, еще сами данные такие, что фиг преобразуешь толком. Плюс еще CLOB-ы предвидятся ) IMHO Какой-то поток сознания. Без примера кода - ни фига не понятно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.04.2016, 17:25 |
|
||
|
JDBC+Oracle(Parameters)
|
|||
|---|---|---|---|
|
#18+
Leonid KudryavtsevIMHO Какой-то поток сознания. Речь о том, что хотелось бы иметь возможность при работе с ojdbc распознавать типы параметров хранимки, чтобы явно преобразовывать параметры к нужному типу. Есть например ParameterMetaData, но максимум получается только достать количество параметров, а их тип - нет. Поэтому остается: - или все параметры хранимки делать строковыми и уже в самой хранимке приводить к нужному типу для вставки в таблицы - пытаться определить тип косвенно по формату строки - или хардкодить по всем полям Вообще изначальная задача загрузка xml :) поэтому может быть конечно еще куча вариантов, типа залить в xml целиком как clob в базу и работать с ним уже там ), но пока мучаю sax-парсер. В общем беда :/ ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.04.2016, 17:37 |
|
||
|
JDBC+Oracle(Parameters)
|
|||
|---|---|---|---|
|
#18+
JDSраспознавать типы параметров хранимки, чтобы явно преобразовывать параметры к нужному типу И в чем проблема? JDSЕсть например ParameterMetaData Зачем ParameterMetaData? С учетом, что документация ничего не обещает. ДокументацияAn object that can be used to get information about the types and properties for each parameter marker in a PreparedStatement object. For some queries and driver implementations, the data that would be returned by a ParameterMetaData object may not be available until the PreparedStatement has been executed. Some driver implementations may not be able to provide information about the types and properties for each parameter marker in a CallableStatement object. Что в общем и логично. Т.к. CallbableStatement не обязательно хранимка, а может быть и анонимный PL/SQL блок, у которого типов параметров может не быть. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.04.2016, 17:51 |
|
||
|
JDBC+Oracle(Parameters)
|
|||
|---|---|---|---|
|
#18+
JDS, Есть доки из какого типа в какой приводит jdbc. У меня тоже xml импорт. И решил как написал выше. Код в 2 строки. Null ничего не ломает, т.к xml его может не быть. Нет именованных, но зато компактность кода для 30 параметров. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.04.2016, 18:01 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=37687771&tid=2124169]: |
0ms |
get settings: |
11ms |
get forum list: |
21ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
36ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
76ms |
get tp. blocked users: |
1ms |
| others: | 247ms |
| total: | 416ms |

| 0 / 0 |
