java的jdbc连接,单例连接对象还是spring jdbc连接?
Posted
技术标签:
【中文标题】java的jdbc连接,单例连接对象还是spring jdbc连接?【英文标题】:jdbc connection with java, singleton connection object or spring jdbc connection? 【发布时间】:2011-06-07 13:13:17 【问题描述】:我正在用 java 操作一个 postgresql 数据库。请帮我选择一个开发实践。
我必须:
创建一个 jdbc 单例对象? 为每个请求创建一个新连接? 还是使用jdbc api for spring framework?最佳做法是什么?
【问题讨论】:
这个太笼统了,你目前在用什么,你想达到什么目的? 【参考方案1】:模糊问题的模糊答案:
宁可管理您的 JDBC 连接。如果您打开了太多连接,则必须维护它们并确保它们已关闭以供其他连接访问数据库(您可能会出现“打开的文件过多”的异常)。连接池维护您的连接。每个请求有 1 个连接,完成后将其返回到池中。
我会这样做:
在 Connection Pool 中维护我的 JDBC 连接(感谢 Jigar Joshi)。 从连接池请求连接并在我的DAO 中使用它(DAO 是我的对象对 DB 的 CRUD)。 连接完成后,将连接返回到连接池。如果您使用的是 Spring,请使用 Spring JDBC Template。
【讨论】:
【参考方案2】:我在哪里可以找到有关如何进行连接的良好说明或教程 将 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 );
对你的数据源做任何你想做的事,这将得到一个支持 使用默认参数设置的连接池。您可以绑定数据源 到 JNDI 名称服务,或根据您的喜好直接使用它。 完成后,您可以像这样清理已创建的 DataSource:
DataSources.destroy( cpds );
就是这样!剩下的就是细节。
【讨论】:
【参考方案3】:保持单个连接甚至更好地使用Connection-pooling
【讨论】:
见this以上是关于java的jdbc连接,单例连接对象还是spring jdbc连接?的主要内容,如果未能解决你的问题,请参考以下文章