Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Общие вопросы > паралельно выполняемые SQL запросы


Автор: barin_Student 24.9.2009, 07:53
Вообщем у меня такая штука:
Код

public void insertNewRecord(String record){
   
}
public void deleteRecord(int id_record){
}
ect....

Есть один класс который реализует работу с таблицами, resultSet и statement один раз определяються, и дальше пошла работа вида: с потоков демонов обращаються к этому классу ассинхронно, то есть вариант что еще прошлый запрос не доконца отработал и тут другой класс стучиться для нового запроса, и я думаю из за этого у меня такая ошибка:
Operation not allowed after ResultSet closed
к итогу, от чаго генериться такая ошибка? и как организовать решение моей задачи? Сорри за коряво заданный вопрос smile 

Автор: garbuz 24.9.2009, 09:25
Я далеко не спец в потоках, но разве join не для этого?

Автор: olexande 24.9.2009, 09:32
Может попробовать организовать в режиме "потоков и блокировок" - При вызове "ф-ции" устанавливается блокировка, при окончании - снимается ...
В теле "ф-ции" организовать проверку есть-ли (установлена-ли) блокировка. Если блокировка не установлена, то можно "заходить" в "ф-цию".

Это если делать вручную.

Автор: barin_Student 24.9.2009, 11:39
Цитата(olexande @ 24.9.2009,  12:32)
Может попробовать организовать в режиме "потоков и блокировок" - При вызове "ф-ции" устанавливается блокировка, при окончании - снимается ...
В теле "ф-ции" организовать проверку есть-ли (установлена-ли) блокировка. Если блокировка не установлена, то можно "заходить" в "ф-цию".

Это если делать вручную.

Светофоры не подойдут))) smile 

Автор: Shurr 25.9.2009, 17:31
Собственно проблема в параллельном доступе к ресурсам, которые такого режима работы не подразумевают.

Вариант номер один - просто-напросто синхронизировать все методы класса, работающего с БД, чтобы вся работа с ним шла последовательно. Если это приводит к неприемлемому падению производительности - тогда надо делать пул из таких классов, и выдать каждому его инстансу по коннекшену; или создавать инстанс класса для работы с БД каждый раз, но использовать пул коннекшнов.

Автор: duk 25.9.2009, 20:31
Самый разумный вариант, как по мне синхронизировать методы. Можно, правда, SQL команды записывать в список (addBatch(String sql)) и в определенное время выполнять.

Автор: barin_Student 1.10.2009, 08:16
а если я для каждого класса определю свой statement ? можно ли будет паралельно работать с данными?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)