powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / SQL-запросы
6 сообщений из 31, страница 2 из 2
SQL-запросы
    #33438358
mansch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
такие задачи решаються на уровне sql
или strored procedures
...
Рейтинг: 0 / 0
SQL-запросы
    #33438744
Sergey Karpenkov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
manschтакие задачи решаються на уровне sql
или strored procedures
Именно это я и хотел сказать :)
...
Рейтинг: 0 / 0
SQL-запросы
    #33439164
Liner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Евгений ПутилинВ случае если тебе нужно будет 10^6 раз выполнить запроc и ты каждый раз будеш препарировать заново то получиш утечку памяти и на клиенте и на сервере.
Код: plaintext
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.
Connection connect =  null ;        
 try  {
     Class .forName("");
    connect = DriverManager.getConnection("", "", "");
    connect.setAutoCommit(false);
                             
    Statement statement = connect.createStatement(); //создается 1 раз
    Statement st = connect.prepareStatement(""); //создается 1 раз
    ResultSet resultset = statement.executeQuery("SELECT * FROM T2 WHERE ParentID=0"); //создается 1 раз
     while  (resultset.next()) {
    	ResultSet resultset2 = st.executeQuery("");
       	//....
    }                    
    connect.commit();
}
 catch  (SQLException e) {		
    System.err.println(e);
}
 catch  (ClassNotFoundException c) {
    System.err.println(c);
}
 finally  {
	 try  {
	     if  (connect!= null ) {connect.close();}
	}
	 catch  (SQLException e) {
	    connect =  null ;
	    System.err.println(e);
	}	
}
Очень интересно, и в каком месте я получу утечки?
10^6 раз может выполнится только ResultSet resultset2 = st.executeQuery(""); в цикле. Ну и что что препарить буду, это один и тот же statement, никаких утечек на серваке не будет. На клиенте - ссылок на resultset2 не остается - garbage collector без проблем сам разберется.
Если я не догоняю чего-то напишите где будут утечки.

Я почему спросил про try-catch, суть не то что ресурсы освобождать не надо,
ИМХО заворачивать каждый объект в try-finally не стоит, не такие уж тут гигантские растраты. Это ладно тут всего 2 стейтмента, а если их штук 5-7 будет, причем большинство вы только 1 раз откроете? На что ваш код похож будет???

Тут у Timm вроде бы универсальное решение (у него тоже кстати внутри цикла resultset2 не закрывается, так что из вашей логики 10^6 запросов в его коде сожрут столько же памяти) :-) все объекты который он использует в блоке try он объявляет выше а в finally просто контроль всех этих объектов чтоб закрыты были, это удобно, везде одинаково и не нужно думать закроется ли все или нет - 100% закроется.

Но вопрос а нужно ли это вообще делать если следующей командой подключение закрываете???? а connection.close() - автоматом закрывает все объекты связанные с ним?
авторpublic void close() throws SQLException
Releases this Connection object's database and JDBC resources immediately instead of waiting for them to be automatically released

Хотя может быть (точно не знаю, мож кто-нить просветит) так тщательно нужно закрывать объекты если, например, используется пул соединений, но тут я так понял мы говорим об обычном подключении.
...
Рейтинг: 0 / 0
SQL-запросы
    #33439236
Liner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А.Грасоff™ LinerА зачем делать явный rollback если для используемого подключения выставлено setAutoCommit(false)? Это тоже самое что делать commit если выставлено setAutoCommit(true).а где про это сказано?
Хотел написать, что если после ошибок, подключение закрываем - зачем делать rollback? Из javadoc насчет connection.close():
Releases this Connection object's database and JDBC resources
immediately instead of waiting for them to be automatically releasedСессия закроется и изменения в базу не уйдут.

Но решил еще почитать и наткнулся на вот эту статейку.
Офигеть!!!!
...
Рейтинг: 0 / 0
SQL-запросы
    #33439306
Sherst
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
to Sergey Karpenkov

Да, вопрос стоит в выборе древовидных структур из БД.В качестве сервера исп. Interbase.
Структура таблицы такая: [ИдентификаторУзла] [ИмяУзла] [УказательНаРодитель]

Алгоритм построения написан выше (сначала пишу запрос на выбор узлов у которых нет родителя,затем в цикле для каждого такого узла выполняю запрос по поиску его детей,если дети существуют то к род. узлу добавляю фиктивный узел).

mansch
такие задачи решаються на уровне sql
или strored procedures

Т.е. писать хранимую процедуру с параметром - по которому выбираются
родительские узлы?
...
Рейтинг: 0 / 0
SQL-запросы
    #33440077
Sergey Karpenkov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Sherstto Sergey Karpenkov

Да, вопрос стоит в выборе древовидных структур из БД.В качестве сервера исп. Interbase.
Структура таблицы такая: [ИдентификаторУзла] [ИмяУзла] [УказательНаРодитель]

Алгоритм построения написан выше (сначала пишу запрос на выбор узлов у которых нет родителя,затем в цикле для каждого такого узла выполняю запрос по поиску его детей,если дети существуют то к род. узлу добавляю фиктивный узел).


Дёргать базу из-за каждой ветки дерева идея очень плохая. Если конечно вложеность и количество узлов не оч большое то это прокатит, но при росте вложености и количества узлов абсолютно бесполезная трата ресурсов БД. В любом случае даже если следовать вашему алгоритму, то надо если есть такая возможность применять ленивую выборку. Если же надо всё дерево сразу, то я бы сильно подумал и всё таки попробовал изменить структуру так чтобы можно было сделать выборку за один приём, а потом уже рекурсивным алгоритмом разобрать полученый результ сет. Посмотрите вот сюда
http://sdm.viptop.ru/articles/sqltrees.html может быть поможет.
...
Рейтинг: 0 / 0
6 сообщений из 31, страница 2 из 2
Форумы / Java [игнор отключен] [закрыт для гостей] / SQL-запросы
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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