2012-05-11 1 views
-5

Лучше ли обернуть соединение плотно вокруг операции SQL или позволить подключиться через приложение, если соединение не является физическим соединением, а абстракцией, которая поступает из ConnectionPoolDataSource? (Я использую c3p0 для записи.)Должны ли объединенные соединения JDBC с использованием подготовленных операторов быть недолговечными или долговечными?

Эквивалентно (я думаю): если я получаю соединение() один раз для приложения, будет ли c3p0 выглядеть как стабильное соединение, которое не умирает, даже если базовый физический соединение (и) умирают и оживают?

И если я должен сделать соединение эфемерным, как мне запрограммировать это с помощью постоянных подготовленных утверждений?

+0

Когда вы говорите «один раз за приложение», это однопоточное приложение? – skaffman

+0

Многопоточность. Как бы то ни было, есть одно сырое соединение для всех потоков, и это отлично работает - я представляю CPDS для решения проблемы восстановления соединения при его снижении. – djechlin

+1

Для рабочего стола или Интернета? Если веб и Java EE, просто используйте EJB/JPA. Тогда вам не нужно беспокоиться о связях, объединении, транзакциях и т. Д. Контейнер сделает все для вас. Кстати, одно соединение для всех потоков - это рецепт катастрофы, если он используется несколькими пользователями. – BalusC

ответ

1

Хорошо, тогда это вернётся к исходному вопросу - как я могу совместно использовать PreparedStatement между соединениями, если есть много соединений? Я думал, что соединения создают, следовательно, собственные PreparedStatements.

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

Или, если это веб-приложение Java EE, обратите внимание на JPA, чтобы уменьшить шаблон JDBC для oneliners и посмотреть на EJB, чтобы успешно передать транзакционную обработку контейнеру, чтобы вам не нужно было возиться с (автоматическими) коммитами и откаты.