jdbc连接java,singleton连接对象还是spring jdbc连接?

时间:2011-06-07 13:13:17

标签: java sql spring postgresql jdbc

我正在使用java操作postgresql数据库。请帮我选择开发实践。

我必须:

  • 创建一个jdbc单例对象?
  • 为每个请求创建一个新连接?
  • 或者使用jdbc api for spring framework?

哪种是最佳做法?

3 个答案:

答案 0 :(得分:4)

模糊问题的模糊答案:

而是管理您的JDBC连接。如果您打开了太多连接,则必须维护它们并确保它们已关闭以便其他连接访问数据库(您可以使用Exception声明“打开的文件过多”)。连接池保持您的连接。每个请求有1个连接,一旦完成,请将其返回池中。

我会这样做:

  • 让我的JDBC连接保持在Connection Pool(感谢Jigar Joshi)。
  • 从连接池请求连接并在我的DAO中使用它(DAO是我的对象到数据库的CRUD)。
  • 连接完成后,将连接返回到连接池。

如果您使用的是Spring,请使用Spring JDBC Template

答案 1 :(得分:2)

  

我在哪里可以找到有关如何进行连接的良好说明或教程   将JDBC汇集到我客户端上的Postgres数据库中?

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

c3p0的设计非常简单易用。只需把jar文件 [lib / c3p0-0.9.0.jar]在您的应用程序的有效CLASSPATH中,并制作一个 DataSource是这样的:

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执行任何操作,该数据源将由a支持 使用默认参数设置连接池。您可以绑定DataSource 到JNDI名称服务,或直接使用它,如您所愿。  完成后,您可以清理您创建的DataSource,如下所示:

DataSources.destroy( cpds );

就是这样!剩下的就是细节。

答案 2 :(得分:1)

保持单一连接,甚至更好地使用Connection-pooling