c3p0作为数据库连接池使用最广泛的一种,我自己也写了demo,在自己项目中用起来。数据库连接池的好处就不说了,不然也不会知道c3p0,。主要是里面的参数设置和作用,
有数据参数设置比较好的,或者特殊参数意义的后续补充。
直接上:
1.maven jar包库。或者去相关网站,maven网站自己下载。
<dependency> <groupId>com.mchange</groupId> <artifactId>c3p0</artifactId> <version>0.9.5.2</version> </dependency>
2.数据库连接池类:DBConnectServer.java
import java.beans.PropertyVetoException; import java.sql.Connection; import java.sql.SQLException; import com.mchange.v2.c3p0.ComboPooledDataSource; public final class DBConnectServer { //使用单利模式创建数据库连接池 private static DBConnectServer instance; private static ComboPooledDataSource dataSource; private DBConnectServer() throws SQLException, PropertyVetoException { dataSource = new ComboPooledDataSource(); dataSource.setUser("root"); //用户名 dataSource.setPassword(""); //密码 dataSource.setJdbcUrl("jdbc:mysql://127.0.0.1:3306/lab");//数据库地址 dataSource.setDriverClass("com.mysql.jdbc.Driver"); dataSource.setInitialPoolSize(5); // 初始化时获取连接数,取值应在minPoolSize与maxPoolSize之间。Default: 3 dataSource.setMinPoolSize(1); // 连接池中保留的最小连接数 dataSource.setMaxPoolSize(10); // 连接池中保留的最大连接数。Default: 15 dataSource.setMaxStatements(50);//最长等待时间 dataSource.setMaxIdleTime(60);//最大空闲时间,60秒内未使用则连接被丢弃。若为0则永不丢弃。Default: 0 dataSource.setAcquireIncrement(3);// 当连接池中的连接耗尽的时候c3p0一次同时获取的连接数。Default: 3 dataSource.setAcquireRetryAttempts(30);// 定义在从数据库获取新连接失败后重复尝试的次数。Default: 30 } public static final DBConnectServer getInstance() { if (instance == null) { try { instance = new DBConnectServer(); } catch (Exception e) { e.printStackTrace(); } } return instance; } public synchronized final Connection getConnection() { Connection conn = null; try { conn = dataSource.getConnection(); } catch (SQLException e) { e.printStackTrace(); } return conn; } }
3.测试调用,我这里使用的是mysql数据库,
public class QueryTest { public static void main(String[] args) throws Exception{ Connection conn=null; conn=DBConnectServer.getInstance().getConnection(); String sql="select * from user"; PreparedStatement stmt=conn.prepareCall(sql); ResultSet res=stmt.executeQuery(); while (res.next()){ System.out.println(res.getString("username")); } // 连续数据库 } }