Руководство по Java / советы для безопасного дао - PullRequest
2 голосов
/ 08 февраля 2012

У меня есть веб-приложение, которому требуется база данных.
Мой бэкэнд действительно маленький (максимум 4 таблицы), а операции SQL не так уж и много.
Поэтому я решил, что какое-то надежное решение ORM похоже на удар мосхито с шумом, и я собираюсь просто сделать небольшой шаблон DAO, чтобы код был более чистым (вместо прямого удара по БД с помощью команд sql).

Пока это работает, но я не уверен, что не попал в ловушку, не зная.
Я использую пул соединений Tomcat и ожидаю одновременного доступа к базе данных.

Мой вопрос связан с параллелизмом и использованием объектов Java Java.

Пример:

Я делаю следующее:

  • сделать запрос
  • получить набор результатов и использовать его для построения объекта (dto)
  • при создании этого объекта я делаю новый SQL-запрос (используя то же соединение и с открытым предыдущим набором результатов)

Это правильно / безопасно?

Также могу ли я повторно использовать это соединение повторно?
Я предполагаю, что это не проблема использовать его через несколько потоков, верно?

Как правило, приветствуются любые советы / рекомендации по правильному следу

1 Ответ

1 голос
/ 08 февраля 2012

Что касается соединений, то, пока вы используете пул соединений, вы гарантируете, что каждый поток использует свое собственное соединение, поэтому с этой точки зрения в вашем многопоточном окружении не возникает проблем (вы можете проверить * 1001).* Является ли поток java.sql.Connection безопасным? ).

Что касается ResultSet и второго выполняемого вами запроса, вы должны принять во внимание, что ResultSet поддерживаеткурсор, указывающий на текущую строку данных.Таким образом, ключевой момент в вашем вопросе заключается в том, что если вы используете один и тот же «оператор SELECT» , потому что в этом случае вы можете получить те же атрибуты курсора и могут возникнуть некоторые проблемы.

Проверьте Javadoc ResultSet, особенно это предложение:

Объект ResultSet автоматически закрывается, когда объект Statement, который сгенерировал его, закрывается, повторно выполняется или используется для получения следующего результата из последовательностинескольких результатов.

и Как можно избежать ResultSet - закрытое исключение в Java? .

...