jdbc-соединение с java, синглтон-объектом или пружинным jdbc-соединением? - PullRequest
2 голосов
/ 07 июня 2011

Я манипулирую базой данных postgresql с помощью Java.Пожалуйста, помогите мне выбрать практику разработки.

Должен ли я:

  • создать одноэлементный объект jdbc?
  • создать новое соединение для каждого запроса?
  • или использовать API JDBC для пружинных рамок?

Какая лучшая практика?

Ответы [ 3 ]

4 голосов
/ 07 июня 2011

Неясный ответ на неопределенный вопрос:

Скорее всего, ваши соединения JDBC управляются. Если у вас открыто слишком много соединений, вам нужно будет поддерживать их и убедиться, что они закрыты, чтобы другие соединения могли обращаться к базе данных (может быть исключение, указывающее «слишком много открытых файлов»). Пул подключений поддерживает ваше соединение. Имейте 1 соединение на запрос, и когда вы закончите, верните его обратно в пул.

Я бы сделал это:

  • Поддерживать мои JDBC-соединения в Пуле соединений (спасибо Джигар Джоши ).
  • Запросить соединение из пула соединений и использовать его в моем DAO (DAO - это то, что CRUD моего объекта в БД).
  • Как только соединение будет установлено, верните соединение в пул соединений.

Если вы используете Spring, используйте шаблон Spring JDBC .

2 голосов
/ 07 июня 2011

Где найти хорошие инструкции или учебное пособие о том, как создать пул соединений для JDBC с базой данных Postgres на моем клиенте?

http://www.mchange.com/projects/c3p0/index.html

c3p0был разработан, чтобы быть простым в использовании.Просто поместите файл jar [lib / c3p0-0.9.0.jar] в эффективный CLASSPATH вашего приложения и создайте источник данных, подобный этому:

import com.mchange.v2.c3p0.*;

...

ComboPooledDataSource cpds = new ComboPooledDataSource();
cpds.setDriverClass( "org.postgresql.Driver" ); //loads the jdbc driver            
cpds.setJdbcUrl( "jdbc:postgresql://localhost/testdb" );
cpds.setUser("dbuser");                                  
cpds.setPassword("dbpassword");    

[Необязательно] Если вы хотите включить PreparedStatementВ пуле вы также должны установить maxStatements и / или maxStatementsPerConnection (оба по умолчанию равны 0):

cpds.setMaxStatements( 180 ); 

Делайте все что хотите с вашим источником данных, который будет поддерживаться пулом соединений, настроенным с помощьюпараметры по умолчанию.Вы можете привязать DataSource к службе имен JNDI или использовать ее напрямую, как вам удобно.Когда вы закончите, вы можете очистить созданный вами источник данных следующим образом:

DataSources.destroy( cpds );

Вот и все!Остальное подробно.

1 голос
/ 07 июня 2011

Поддерживать одно соединение или даже лучше использовать Пул соединений

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...