繁体   English   中英

jdbc connection with java, singleton connection object or spring jdbc connection?

[英]jdbc connection with java, singleton connection object or spring jdbc connection?

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

我必须吗:

  • 创建一个 jdbc singleton object?
  • 为每个请求创建一个新连接?
  • 或者将 jdbc api 用于 spring 框架?

哪个是最佳实践?

模糊问题的模糊答案:

而是管理您的 JDBC 连接。 如果您打开了太多连接,则必须维护它们并确保它们已关闭以供其他连接访问数据库(您可能会出现“打开的文件过多”的异常)。 连接池维护您的连接。 每个请求有 1 个连接,完成后,将其返回到池中。

我会这样做:

  • 连接池中维护我的 JDBC 连接(感谢Jigar Joshi )。
  • 从连接池请求连接并在我的DAO中使用它(DAO 是我的 object 到 DB 的 CRUD)。
  • 连接完成后,将连接返回到连接池。

如果您使用 Spring,请使用Spring JDBC 模板

我在哪里可以找到关于如何将 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 绑定到 JNDI 名称服务,或者根据您的喜好直接使用它。 完成后,您可以像这样清理已创建的 DataSource:

DataSources.destroy( cpds );

而已。 rest 是细节。

保持单个连接甚至更好地使用连接池

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM