powered by simpleCommunicator - 2.0.41     © 2025 Programmizd 02
Форумы / Java [игнор отключен] [закрыт для гостей] / OraclePreparedStatement из oracle jdbc6 драйвера не устанавливает параметр start
11 сообщений из 11, страница 1 из 1
OraclePreparedStatement из oracle jdbc6 драйвера не устанавливает параметр start
    #37430033
aleksandy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
 public   static   void  main(String[] args)  throws  Exception {
    OracleConnectionPoolDataSource ods =  new  OracleConnectionPoolDataSource();
    ods.setURL("jdbc:oracle:thin:@//localhost:1521/xe");
    ods.setUser("user");
    ods.setPassword("password");
    Connection c = ods.getConnection();
    OraclePreparedStatement st = (OraclePreparedStatement) c.prepareStatement("SELECT :start FROM dual");
    st.setObjectAtName("start", "0");
    ResultSet rs = st.executeQuery();
     while  (rs.next()) {
        System.out.println(rs.getString( 1 ));
    }
}
Результат
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
Exception in thread "main" java.sql.SQLSyntaxErrorException: ORA-01745: неверное имя host/bind переменной

	at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:440)
	at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:396)
	at oracle.jdbc.driver.T4C8Oall.processError(T4C8Oall.java:837)
	at oracle.jdbc.driver.T4CTTIfun.receive(T4CTTIfun.java:445)
	at oracle.jdbc.driver.T4CTTIfun.doRPC(T4CTTIfun.java:191)
	at oracle.jdbc.driver.T4C8Oall.doOALL(T4C8Oall.java:523)
	at oracle.jdbc.driver.T4CPreparedStatement.doOall8(T4CPreparedStatement.java:207)
	at oracle.jdbc.driver.T4CPreparedStatement.executeForDescribe(T4CPreparedStatement.java:863)
	at oracle.jdbc.driver.OracleStatement.executeMaybeDescribe(OracleStatement.java:1153)
	at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1275)
	at oracle.jdbc.driver.OraclePreparedStatement.executeInternal(OraclePreparedStatement.java:3576)
	at oracle.jdbc.driver.OraclePreparedStatement.executeQuery(OraclePreparedStatement.java:3620)
	at oracle.jdbc.driver.OraclePreparedStatementWrapper.executeQuery(OraclePreparedStatementWrapper.java:1491)
	at OracleConnector.main(OracleConnector.java:22)
Если имя переменной изменить, то все работает нормально. С чем связано такое поведение драйвера, это баг или фича? Дебаггером пройтись затруднительно, т.к. нигде исходников для драйвера нет.
...
Рейтинг: 0 / 0
OraclePreparedStatement из oracle jdbc6 драйвера не устанавливает параметр start
    #37430036
aleksandy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
С jdbc14 такая же хрень :(
...
Рейтинг: 0 / 0
OraclePreparedStatement из oracle jdbc6 драйвера не устанавливает параметр start
    #37430061
0FD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aleksandy,

select keyword,reserved from v$reserved_words where keyword ='START'

и в ansi sql тоже кажется
...
Рейтинг: 0 / 0
OraclePreparedStatement из oracle jdbc6 драйвера не устанавливает параметр start
    #37430110
eros2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
> "SELECT :start FROM dual"

Кстати, так писать нельзя, параметры можно использовать только в параметрах. Т.е. это вовсе не простая подстановка.
...
Рейтинг: 0 / 0
OraclePreparedStatement из oracle jdbc6 драйвера не устанавливает параметр start
    #37430130
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
особенно нельзя параметром имена таблиц и полей
...
Рейтинг: 0 / 0
OraclePreparedStatement из oracle jdbc6 драйвера не устанавливает параметр start
    #37430140
GKS_Samara
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день, eros2!

>> "SELECT :start FROM dual"
>
> Кстати, так писать нельзя, параметры можно использовать только в
> параметрах. Т.е. это вовсе не простая подстановка.

Почему нельзя?
Если несколько усложнить код, например, то данная конструкция
приобретает смысл и остаётся законной.
Код: plaintext
1.
2.
3.
4.
  insert into table1 (field, field2)
    select t.field1, :param
    from table2
    where ...

Так что если не считать имя переменной, то остальное законно и логично.
А то, что в этом примере смотрится бредово- так то пример.

--
Алексей
JID: alxt@ya.ru
Posted
via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
OraclePreparedStatement из oracle jdbc6 драйвера не устанавливает параметр start
    #37430145
0FD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Автор написал:

Если имя переменной изменить, то все работает нормально.

А ему обьясняют что так нельзя, работает, просто start это зарезервированное слово, и его нельзя использовать в качестве переменной.
...
Рейтинг: 0 / 0
OraclePreparedStatement из oracle jdbc6 драйвера не устанавливает параметр start
    #37430155
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GKS_Samara,
меня учили этому:
"вы хотите where кляузу присваивать как бинд переменную?
никак. "
Байнды вместо where clause в динамическом запросе
- если простая конкатенация (склейка стринга на клиенте), то можно.
Но это не параметры к серверу в чистом виде от драйвера.
______________________________________________
"Сложнее всего в мире достигнуть простоты — это крайняя граница опыта и последнее усилие гения". © George Sand.
AutoPOI.ru — ГИС-технологии для Oracle
...
Рейтинг: 0 / 0
OraclePreparedStatement из oracle jdbc6 драйвера не устанавливает параметр start
    #37430169
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
0FDАвтор написал:

Если имя переменной изменить, то все работает нормально.

А ему обьясняют что так нельзя, работает, просто start это зарезервированное слово, и его нельзя использовать в качестве переменной.
SELECT 5 FROM dual
тоже работает у всех - проверь
...
Рейтинг: 0 / 0
OraclePreparedStatement из oracle jdbc6 драйвера не устанавливает параметр start
    #37430180
0FD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro1230FDАвтор написал:

Если имя переменной изменить, то все работает нормально.

А ему обьясняют что так нельзя, работает, просто start это зарезервированное слово, и его нельзя использовать в качестве переменной.
SELECT 5 FROM dual
тоже работает у всех - проверь

Проверял, правда в tora, SELECT :start FROM dual выдает такую же ошибку, и также работает если изменить имя переменной.
...
Рейтинг: 0 / 0
OraclePreparedStatement из oracle jdbc6 драйвера не устанавливает параметр start
    #37430195
aleksandy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
0FD,

спасибо за разъяснение.
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / OraclePreparedStatement из oracle jdbc6 драйвера не устанавливает параметр start
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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