powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Проблемы с закрытием курсоров в БД Oracle при использовании JDBC
9 сообщений из 9, страница 1 из 1
Проблемы с закрытием курсоров в БД Oracle при использовании JDBC
    #38233012
newbsite
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Подскажите, может кто уже наступал на грабли связанные с закрытием курсоров, при использовании JDBC драйвера. При выполнении следующего кода:
Код: 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.
............
       ResourceLocator resourceLocator = ResourceLocator.getInstance(this.getServletContext());
       connection = resourceLocator.getConnection();
         .....................
         cs = connection.prepareCall("{ call monitor.Test(?,?,?)} ");				
         cs.setString(1, request.getHeader("dtS"));
	 cs.setString(2, request.getHeader("dtPo"));
	 cs.registerOutParameter(3, Types.CLOB);
	 cs.execute();
	 long light = cs.getClob(3).length();
	 String str = cs.getClob(3).getSubString(1, (int) light);
	 response.getWriter().println(str);				
	
	.................
		} catch (AccessEcseption e) {
		} catch (Exception e) {
			e.printStackTrace();
		}
        finally {
            try {
            	if (ps != null){
            		ps.close();
            	}
                if (rs != null){
                	rs.close();
                }   
                if (cs != null){
                	cs.close();
                	cs = null;                	
                }
                connection.close();
            	connection = null;
            	
            }
            catch (Exception ex1) { 
            
            }
        } 



в бд открывается курсор, который не закрывается. Через некоторое время получаю ошибку ora-01000


Хранимая процедура простейшая:
Код: plsql
1.
2.
3.
4.
5.
6.
create or replace
PROCEDURE Test(dtS in varchar2, dtPo in varchar2, json out clob) AS 

BEGIN         
   json := '{"records":[]}';
END GET_FOREX_KASSA;


Oracle Database 11g Release 2
...
Рейтинг: 0 / 0
Проблемы с закрытием курсоров в БД Oracle при использовании JDBC
    #38233029
Фотография Denis Popov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
On 19.04.2013 17:17, newbsite wrote:

> в бд открывается курсор, который не закрывается. Через некоторое время получаю ошибку ora-01000


А как выглядит курсор, из V$OPEN_CURSOR?

Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Проблемы с закрытием курсоров в БД Oracle при использовании JDBC
    #38233053
just_vladimir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
newbsite,

а где собственно сам курсор, ни ResultSet'ов в приведенном Java, ни курсоров в PL/SQL не увидел ? И что за объекты ps и rs вы close'ите, а нигде в коде выше их нет?
...
Рейтинг: 0 / 0
Проблемы с закрытием курсоров в БД Oracle при использовании JDBC
    #38233065
newbsite
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Denis Popov,
SQL TEXT: BEGIN monitor.GET_FOREX_KASSA(:1 ,:2 ,:3 ); END;
CURSOR_TYPE: SESSION CURSOR CACHED
...
Рейтинг: 0 / 0
Проблемы с закрытием курсоров в БД Oracle при использовании JDBC
    #38233090
newbsite
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
just_vladimir
В том то и дело курсоров как таковых в коде нет, а в бд Oracle при использовании JDBC драйвера создается курсор, который не закрывается.
...
Рейтинг: 0 / 0
Проблемы с закрытием курсоров в БД Oracle при использовании JDBC
    #38233110
Фотография Denis Popov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
On 19.04.2013 17:34, newbsite wrote:

> SQL TEXT: BEGIN monitor.GET_FOREX_KASSA(:1 ,:2 ,:3 ); END;

У тебя в коде показан вызыв monitor.Test(?,?,?), а курсор - monitor.GET_FOREX_KASSA(), так все-таки что именно вызывается? Может не в этом месте что-то не закрывается?
...
Рейтинг: 0 / 0
Проблемы с закрытием курсоров в БД Oracle при использовании JDBC
    #38233143
newbsite
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Denis Popov,
Не в названии дело, я просто уже экспериментирую с разными процедурами, перед постом сюда забыл поменять название.
Вызов в сервлете:
Код: java
1.
	cs = connection.prepareCall("{ call monitor.GET_FOREX_KASSA(?,?,?)} ");


процедура:
Код: plsql
1.
2.
3.
4.
5.
create or replace
PROCEDURE GET_FOREX_KASSA(dtS in varchar2, dtPo in varchar2, json out clob) AS  
BEGIN         
   json := '{"records":[]}';
END GET_FOREX_KASSA;
...
Рейтинг: 0 / 0
Проблемы с закрытием курсоров в БД Oracle при использовании JDBC
    #38233234
Фотография Denis Popov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Локально у себя я такого не наблюдаю:

Код: 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.
Connection con;
...
CallableStatement cs = null;
Statement st = con.createStatement();
st.execute(
  "create or replace procedure GET_FOREX_KASSA(dtS in varchar2, dtPo in varchar2, json out clob) AS\n" +
  "begin\n" +
  "   json := '{\"records\":[]}';\n" +
  "end GET_FOREX_KASSA;"
);
try {
  cs = con.prepareCall("{ call GET_FOREX_KASSA(?,?,?)} ");
  cs.setString(1, "dtS");
  cs.setString(2, "dtPo");
  cs.registerOutParameter(3, Types.CLOB);
  cs.execute();
  long light = cs.getClob(3).length();
  String str = cs.getClob(3).getSubString(1, (int) light);
  System.out.println(str);
} catch (Exception e) {
  e.printStackTrace();
} finally {
  try {
    if (cs != null) {
      cs.close();
    }
  } catch (Exception ex1) {

  }
}
ResultSet rs = st.executeQuery("select * from V$OPEN_CURSOR where sid = (select sid from V$MYSTAT where rownum = 1)");
while (rs.next()) {
  System.out.println(
    rs.getString("cursor_type") + ": " + rs.getString("sql_text")
  );
}
rs.close();
st.close();

con.close();


в списке открытых курсоров вызов процедуры отсутствует, а у тебя как? Какой реально класс используется для Connection, это ведь пул, а не одиночное соединение? Или может попробовать взять последний оракловый драйвер.
...
Рейтинг: 0 / 0
Проблемы с закрытием курсоров в БД Oracle при использовании JDBC
    #38233283
newbsite
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Denis Popov большое спасибо за помощь, после включения трассировки, разобрался. В сервлете был вызов еще одной хранимой процедуры, после вызова которой не закрывалось соединение
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Проблемы с закрытием курсоров в БД Oracle при использовании JDBC
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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