powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / JDBC+Oracle(Parameters)
25 сообщений из 89, страница 1 из 4
JDBC+Oracle(Parameters)
    #36405725
bl_beard
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Используется
ojdbc14.jar
Oracle 10g
java version "1.6.0_13"
Java(TM) SE Runtime Environment (build 1.6.0_13-b03)
Java HotSpot(TM) Client VM (build 11.3-b02, mixed mode, sharing)

Есть запрос типа
Код: plaintext
1.
2.
3.
4.
5.
    select * from table1 t1 
    where field1 = :p1
    union
    select * from table1 t2
    where field1 = :p1

В Д7 я делал так
Код: plaintext
1.
   oraquery.ParamByName("p1").Value :=   10 ;
однако в Java такое не прокатывает:
Код: plaintext
1.
    ((OraclePreparedStatement)stmt).setString( 1 , workDate);
   
получаю
Код: plaintext
java.sql.SQLException: ORA- 00911 : invalid character
если я правильно понял не назначились все параметры,
так как использован позиционный метод установки параметров.

Именованный не поддерживается драйвером.
Кто может дать дельный совет?
Как определить количество параметров и назначить все?
Или какой драйвер(линк) и как использовать(пример кода), в котором
имплементирована именованная установка параметров?


_______
Жизнь - это два CD c Half-Life (λ)
...
Рейтинг: 0 / 0
JDBC+Oracle(Parameters)
    #36405746
0FD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bl_beard,
Код: plaintext
1.
((OraclePreparedStatement)stmt).setStringAtName("p1", workDate);
...
Рейтинг: 0 / 0
JDBC+Oracle(Parameters)
    #36405786
bl_beard
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
0FDbl_beard,
Код: plaintext
1.
((OraclePreparedStatement)stmt).setStringAtName("p1", workDate);


в какой версии драйвера?
в моей(указана в первом письме) такого метода нет.
по крайней мере Eclipse в подсказке не дает такого метода.
...
Рейтинг: 0 / 0
JDBC+Oracle(Parameters)
    #36405862
0FD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bl_beard,

Oracle JDBC Driver version - "10.2.0.4.0"

А точно у тебя драйвер от 10g, может 9, а там этого нет(посмотри META-INF\MANIFEST.MF).
...
Рейтинг: 0 / 0
JDBC+Oracle(Parameters)
    #36405878
Фотография Denis Popov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bl_beardИспользуется
ojdbc14.jar
Oracle 10g
java version "1.6.0_13"
...
в какой версии драйвера?
в моей(указана в первом письме) такого метода нет.

Скачай последние драйвера : http://www.oracle.com/technology/software/tech/java/sqlj_jdbc/htdocs/jdbc_112010.html и переключись на ojdbc6.jar.
...
Рейтинг: 0 / 0
JDBC+Oracle(Parameters)
    #36405975
bl_beard
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Denis Popov,

скачал. поменял. но сейчас на строке коннекта
Код: plaintext
1.
2.
   toCon = DriverManager.getConnection(props.getProperty("url"), 
	props.getProperty("username"), props.getProperty("password"));
Код: plaintext
1.
<entry key="url">jdbc:oracle:thin:@ 10 . 10 . 0 . 23 : 1521 :risk</entry>
Код: plaintext
1.
2.
3.
4.
5.
Exception in thread "Thread-1" java.lang.IllegalAccessError: tried to access  class  oracle.jdbc.driver.OraclePreparedStatement from  class  GetData
	at GetData.Initialize(GetData.java: 83 )
	at GetData.TryInitialize(GetData.java: 245 )
	at GetData.run(GetData.java: 264 )
	at java.lang.Thread.run(Unknown Source)
...
Рейтинг: 0 / 0
JDBC+Oracle(Parameters)
    #36405979
bl_beard
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bl_beard,

случайно рано запостил.
Вообщем ошибка при соединении.
Что фиксить?..
...
Рейтинг: 0 / 0
JDBC+Oracle(Parameters)
    #36406004
0FD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bl_beard,

@//host_name:port_number/service_name

jdbc:oracle:thin:@//10.10.0.23:1521/risk
...
Рейтинг: 0 / 0
JDBC+Oracle(Parameters)
    #36406006
0FD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И вместо oracle.jdbc.driver.OraclePreparedStatement лучше использовать oracle.jdbc.OraclePreparedStatement
...
Рейтинг: 0 / 0
JDBC+Oracle(Parameters)
    #36406010
Фотография Denis Popov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bl_beardВообщем ошибка при соединении.
Что фиксить?..
Поменяй oracle.jdbc .driver .OraclePreparedStatement на oracle.jdbc.OraclePreparedStatement. И для остальных тоже, если в пакете oracle.jdbc есть класс одноименный с классом из пакета oracle.jdbc.driver, то бери первый.
...
Рейтинг: 0 / 0
JDBC+Oracle(Parameters)
    #36406050
bl_beard
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
0FD, Denis Popov

первыми строками в файле класса
Код: plaintext
1.
2.
 import  oracle.jdbc.OraclePreparedStatement;
 import  oracle.jdbc.OracleCallableStatement;

строку коннекта тоже поменял, но ошибка таже самая.
еще Eclipse перед компиляцией говорит что у меня в проекте "Error exist",
но при этом не показывает где. подозреваю что это в
"Java Build Path"/Libraries/Jre System Library
осталась ссылка на ojdbc14.jar, она показана как "(missing)" -
как убрать ее из списка библиотек?
...
Рейтинг: 0 / 0
JDBC+Oracle(Parameters)
    #36406086
Фотография Denis Popov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bl_beard
еще Eclipse перед компиляцией говорит что у меня в проекте "Error exist",
но при этом не показывает где. подозреваю что это в
"Java Build Path"/Libraries/Jre System Library
осталась ссылка на ojdbc14.jar, она показана как "(missing)" -
как убрать ее из списка библиотек?
У тебя ojdbc14.jar подключен прямо в JRE System Library? На мой взгляд, лучше убрать оттуда все сторонние архивы, оформить их в виде отдельных библиотек и эти библиотеки подключать к проекту по необходимости. JRE правится по меню Window->Preferences, ветка Java\Installed JREs
...
Рейтинг: 0 / 0
JDBC+Oracle(Parameters)
    #36406152
bl_beard
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Denis Popov
У тебя ojdbc14.jar подключен прямо в JRE System Library? На мой взгляд, лучше убрать оттуда все сторонние архивы, оформить их в виде отдельных библиотек и эти библиотеки подключать к проекту по необходимости. JRE правится по меню Window->Preferences, ветка Java\Installed JREs

здесь "Java\Installed JREs" пусто.

Denis Popov
У тебя ojdbc14.jar подключен прямо в JRE System Library?
как узнать подключен или нет?

У Хорстмана и Корнелла прочитал что по их мнению некошерно подключать
наборы библиотек к проектам глобально, используя "jre\lib\ext\",
но не дали никаких рекомендаций, как это сделать по хорошему. :(
...
Рейтинг: 0 / 0
JDBC+Oracle(Parameters)
    #36406180
Фотография Denis Popov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bl_beardздесь "Java\Installed JREs" пусто.
Я бы создал здесь JRE. чтобы использовать в проектах

bl_beard
Denis Popov
У тебя ojdbc14.jar подключен прямо в JRE System Library?
как узнать подключен или нет?
Если в списке библиотек проекта развернуть ветку начиная с "JRE System Library", то там должен быть список архивов в него входящих. Только здесь этот список только на чтение, а редактируется в "Java\Installed JREs".

bl_beard
У Хорстмана и Корнелла прочитал что по их мнению некошерно подключать
наборы библиотек к проектам глобально, используя "jre\lib\ext\",
но не дали никаких рекомендаций, как это сделать по хорошему. :(
Чтобы не путаться, давай в этой фразе под "набором библиотек" я буду понимать набор jar-архивов. Практические все среды разработки позволяют организовывать "библиотеки", т.е. набор jar-архивов. Лежать они могут где угодно на диске, но, действительно, лучше их не класть в jre\lib\ext, а то в конце концов сам запутаешься в этой свалке.
...
Рейтинг: 0 / 0
JDBC+Oracle(Parameters)
    #36406865
Garrick
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
JDBC+Oracle(Parameters)
    #36406924
bl_beard
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Denis Popov,

Спасибо за советы, помогло.
И даже с первым вопросом разобрался. :)
Назначение по имени заработало, но ошибка "инвалид чарактер"
осталась. оказалось в конце запроса стояла ";", запрос во всех
средах (Oracle SQL Dev, Toad) выполнялся, а в моей java-проге нет.
теперь все хорошо. :)

Итог:
- перешел на новый драйвер
- заработало назначение параметров по имени (***)
- организовал библиотеку

пысы
в пункте (***) тут остался нюанс: оно оказывается регистрозависимое :(
Код: plaintext
1.
stmt.setStringAtName("p_date", workDate);
Код: plaintext
1.
2.
3.
4.
java.sql.SQLException: Попытка присвоения имени параметра, которое не встречается в данном SQL: p_date
	at oracle.jdbc.driver.OraclePreparedStatement.setStringAtName(OraclePreparedStatement.java: 12137 )
	at oracle.jdbc.driver.OraclePreparedStatementWrapper.setStringAtName(OraclePreparedStatementWrapper.java: 863 )
	at GetData.run(GetData.java: 306 )
	at java.lang.Thread.run(Unknown Source)
в запросе в "P_DATE".
кто то знает что с этим можно сделать?
...
Рейтинг: 0 / 0
JDBC+Oracle(Parameters)
    #36407041
Фотография Denis Popov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bl_beard wrote:

> в пункте (***) тут остался нюанс: оно оказывается регистрозависимое :(
....
> кто то знает что с этим можно сделать?

Забавно, в документации это явно не указано... Боюсь, придется с этим жить, по крайней мере при текущей версии
ораклового JDBC-драйвера.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
JDBC+Oracle(Parameters)
    #37687138
ilych2000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Еще один "сюрприз"
Код: 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.
		Connection con = .....;

		String proc ="declare \n"
				+ " q1 VARCHAR2(20) := :a1; \n"
				+ " q2 VARCHAR2(20) := :a2; \n"
				+ "begin \n"
				+ "  :b1 := q1;\n"
				+ "  :b2 := q2;\n"
				+ "end;\n";
		System.out.println(proc);

		OracleCallableStatement stmt = (OracleCallableStatement) con.prepareCall(proc);

		stmt.setString("a1", "a1");
		stmt.setString("a2", "a2");

		stmt.registerOutParameter("b1", OracleTypes.VARCHAR);
		stmt.registerOutParameter("b2", OracleTypes.VARCHAR);

		stmt.execute();

		System.out.println("b1=" + stmt.getString("b1") + ", b2=" + stmt.getString("b2"));
		System.out.println("Меняем порядок сетов");

		stmt = (OracleCallableStatement) con.prepareCall(proc);

		stmt.setString("a2", "a2");
		stmt.setString("a1", "a1");

		stmt.registerOutParameter("b1", OracleTypes.VARCHAR);
		stmt.registerOutParameter("b2", OracleTypes.VARCHAR);

		stmt.execute();

		System.out.println("b1=" + stmt.getString("b1") + ", b2=" + stmt.getString("b2"));

		con.close();


Результат выпонения:

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
declare 
 q1 VARCHAR2(20) := :a1; 
 q2 VARCHAR2(20) := :a2; 
begin 
  :b1 := q1;
  :b2 := q2;
end;

b1=a1, b2=a2
Меняем порядок сета
b1=a2, b2=a1


Вот так!
Драва: ojbc6.jar
Implementation-Version: 11.2.0.2.0
Java 1.6
...
Рейтинг: 0 / 0
JDBC+Oracle(Parameters)
    #37687551
Garrick
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ilych2000,

Ничего не понял. О чём всё это?
...
Рейтинг: 0 / 0
JDBC+Oracle(Parameters)
    #37687557
ilych2000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
О том, что в OracleCallableStatement при бинде именованных параметров не должен быть важен порядок сетов.
То есть
Код: java
1.
2.
stmt.setString("a1", "a1");
stmt.setString("a2", "a2");


и
Код: java
1.
2.
stmt.setString("a2", "a2");
stmt.setString("a1", "a1");


Не должно иметь значение.
А мой пример показывает обратное.

Причем в OraclePreparedStatement, то есть в селектах этот пример работает как должен.
...
Рейтинг: 0 / 0
JDBC+Oracle(Parameters)
    #37687589
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ilych2000,
а кому оно надо, писать на PSQL в Java на клиенте?
...
Рейтинг: 0 / 0
JDBC+Oracle(Parameters)
    #37687602
ilych2000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Странный вопрос.
В моем проекте все чтение из БД идет селектами,
а изменение строго вызовом хранимок.
...
Рейтинг: 0 / 0
JDBC+Oracle(Parameters)
    #37687644
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ilych2000,
ну, дак я вас тоже не понял, как и Garrick.
Например, зачем PSQL ниже:

String proc ="declare \n"
+ " q1 VARCHAR2(20) := :a1; \n"
+ " q2 VARCHAR2(20) := :a2; \n"
+ "begin \n"
+ " :b1 := q1;\n"
+ " :b2 := q2;\n"
+ "end;\n";
...
Рейтинг: 0 / 0
JDBC+Oracle(Parameters)
    #37687687
ilych2000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Petro123,
Это просто пример по баг с параметрами.

Все просто.
Есть толстый клиент на Дельфях.
В нем это все работает без проблем.

Причем тексты PSQL хранятся на серваке в блобах
и могут написаны как угодно, но выполняются, в толстом клиенте и PLSQLDevelopere.

И они должны вызываться из Java без изменений.
...
Рейтинг: 0 / 0
JDBC+Oracle(Parameters)
    #37687703
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ilych2000Причем тексты PSQL хранятся на серваке в блобах
вот с этого и начинай.
IMHO
- это изврат на любом ЯП (для этого есть сам сервер).
- это всё равно, что хранить Дату в строке.
Поэтому ваш баг малоинтересен в практике.
Удачи!
______________________________________________
"Сделай настолько просто, насколько это возможно, но не проще". © А. Эйнштейн.
AutoPOI.ru — ГИС-технологии для Oracle
...
Рейтинг: 0 / 0
25 сообщений из 89, страница 1 из 4
Форумы / Java [игнор отключен] [закрыт для гостей] / JDBC+Oracle(Parameters)
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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