数据库连接池
JDBC连接是连接数据库常用的方式,但是连接只有当需要的时候才创建,因此每次创建连接都需要耗费比较多的时间,会导致效率低下
数据库连接池的原理是在一个连接池中创建多条连接,当需要时就把连接拿出来使用,等到使用结束之后又把这条连接返回到线程池,这样就实现了资源的重新利用,并且不用等到需要的时候才去创建连接,提高了效率
连接池主要有两种数据源
- DBCP数据源
- C3P0数据源
注释: - 数据源和数据库连接不同,数据源无需创建多个,它是产生数据库连接的工厂(工厂设计模式),因此整个应用只需要一个数据源即可
- 只需创建一个数据源,体现了单例设计模式的思想
C3P0数据源
C3P0连接池的优点:不仅可以自动清理不再使用的Connection,还可以自动清理Statement和ResultSet
使用C3P0连接池的步骤:
下载C3P0-0.9.1.2.jar 包,将它导入到所在的工程当中 ,注意要放在src目录下
其次要搭配好关于自己数据库的一些信息
public final class connectPool{
private static connectPool instance ;
private static ComboPooledDataSource dataSource;
//把构造方法设为私有不可见
private connectPool(){
dataSource = new ComboPooledDataSource();
dataSource.setUser("root"); //设置用户名
dataSource.setPassword("xxxx"); //设置密码
dataSource.setJdbcUrl("jdbc:mysql://localhost:3306/qg");//设置连接的url
dataSource.setDriverClass("com.mysql.jdbc.Driver");
dataSource.setMinPoolSize(1);//设置最小连接数为1
dataSource.setMaxPoolSize(50);//设置最大连接数为50
dataSource.setMaxStatement(50); //设置最长等待时间
}
}
//确保只是建立一个连接池,不会浪费资源
public static final connectPool getInstance(){
if(instance == null){
//加入连接池还没创建,则新建一个连接池
instance = new connectPool();
//内部的构造方法
}
return instance;
}
}
//建立连接
public sychrnoized final Connection getConnection(){
Connection conn = null;
conn = dataSource.getConnection();
}
- 除此之外还可以通过配置xml文件来设置数据库的链接,就不需要最前面的代码
特别注意
<c3p0-config>
<!-- 注意这里的命名要和和之后建立连接的名称一致-->
<named-config name="mysql">
<property name ="driverClass">com.mysql.jdbc.Driver</property>
<!--具体到你要连接的表名-->
<<property name ="jdbcUril">jdbc:mysql://localhost:3306/qg</property>
<property name ="user">root</property>
<property name ="password">xxxxxx</property>
<property name ="initialPoolSize">10</property>
<property name ="maxIdleTime">30</property>
<property name ="minPoolSize">10</property>
<property name ="MaxPoolSize">100</property>
<property name ="maxStatements">150</property>
</named-config>
</c3p0-config>
之后再使用时要注明好链接的名称
public static void main(String[] args){
ComboPooledDataSource ds = new ComboPooledDataSource("mysql");
//......
}
注释:连接池的增删查改和JDBC连接基本类似,通过select、update、delete和insert等关键字来进行。