问题
任何人都可以提供有关如何建立JDBC连接池的示例或链接吗?
从搜索谷歌我看到许多不同的方式这样做,这是相当混乱。
最终我需要代码返回ajava.sql.Connection
对象,但我无法入门..欢迎任何建议。
**更新:**不能javax.sql
orjava.sql
汇集连接实现?为什么不最好使用这些?
#1 热门回答(96 赞)
如果你需要一个独立的连接池,我的偏好是C3P0overDBCP(我在previous answer中已经提到过),我在DBCP负载过重时遇到了太多问题。使用C3P0很简单。来自documentation:
ComboPooledDataSource cpds = new ComboPooledDataSource();
cpds.setDriverClass( "org.postgresql.Driver" ); //loads the jdbc driver
cpds.setJdbcUrl( "jdbc:postgresql://localhost/testdb" );
cpds.setUser("swaldman");
cpds.setPassword("test-password");
// the settings below are optional -- c3p0 can work with defaults
cpds.setMinPoolSize(5);
cpds.setAcquireIncrement(5);
cpds.setMaxPoolSize(20);
// The DataSource cpds is now a fully configured and usable pooled DataSource
但是,如果你在应用程序服务器内运行,我建议使用它提供的内置连接池。在这种情况下,你需要配置它(请参阅应用程序服务器的文档)并通过JNDI检索DataSource:
DataSource ds = (DataSource) new InitialContext().lookup("jdbc/myDS");
#2 热门回答(18 赞)
通常,如果你需要连接池,那么你正在编写在某个托管环境中运行的应用程序,即你正在应用程序服务器中运行。如果是这种情况,请确保在尝试任何其他选项之前检查应用程序服务器提供的连接池设施。
开箱即用的解决方案将与其他应用服务器设施集成得最好。但是,如果你没有在应用程序服务器中运行,我建议你使用.Apache Commons DBCP Component。它被广泛使用,并提供大多数应用程序所需的所有基本池功能。
#3 热门回答(14 赞)
我建议使用commons-dbcplibrary。有很多关于如何使用它的examples,这里是movesimple one的链接。用法很简单:
BasicDataSource ds = new BasicDataSource();
ds.setDriverClassName("oracle.jdbc.driver.OracleDriver")
ds.setUsername("scott");
ds.setPassword("tiger");
ds.setUrl(connectURI);
...
Connection conn = ds.getConnection();
你只需要创建一次数据源,因此如果你不知道如何操作,请务必阅读文档。如果你不知道如何正确编写JDBC语句以便不泄漏资源,那么你也可能需要阅读thisWikipediapage。