1.介绍
池:就是一个容器,在内存中就是一片空间,用于存储程序中的数据。
连接池:就是将连接对象存放在一个容器中,当需要连接时,就直接从连接池中获取一个连接进行使用,用完连接后再将连接还回连接池中。
目的是为了减少连接创建和关闭的次数,实现连接的服用。
传统方式操作数据库
在传统方式中(即不使用连接池),每次需要就创建一个连接进行使用,用完连接后就将连接直接关闭。对于数据库来说,频繁的创建连接和关闭连接会非常的消耗资源,而且耗费时间,会导致程序执行效率的降低,连接也无法复用。
使用连接池操作数据库
可以在程序中创建一个池子,在程序一启动时,就初始化一批连接放在连接池中。当用户需要连接时,就直接从池子中拿一个连接进行使用,当连接用完后,也不要将连接关闭,而是将连接还回池中,下一个用户需要连接时也是如此。
这样一来,用来用去都是池中的这一批连接,可以减少连接创建和关闭的次数。提高程序执行的效率,还可以实现连接的复用。
2.三种连接池方法
方法一:
package JDBC.day1;
import com.mchange.v2.c3p0.ComboPooledDataSource;
import org.junit.Test;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;
//测试c3p0连接池
public class Testc3p0 {
@Test
public void testFindAll(){
Connection conn = null;
Statement stat = null;
ResultSet rs = null;
//创建一个连接池对象(容器)
ComboPooledDataSource pool = new ComboPooledDataSource();
try {
//设置连接数据库的基本信息(方法一)
// pool.setDriverClass("com.mysql.cj.jdbc.Driver");
// pool.setJdbcUrl("JDBC:mysql://localhost:3306/jt_db?serverTimezone=Asia/Shanghai&characterEncoding=utf-8");
// pool.setUser("root");
// pool.setPassword("root");
// conn = JdbcUtil.getConn();
//从连接池中获取一个连接对象
conn = pool.getConnection();
stat = conn.createStatement();
String sql = "select * from account";
rs = stat.executeQuery(sql);
while (rs.next()){
int id = rs.getInt("id");
String name = rs.getString("name");
Double money = rs.getDouble("money");
System.out.println(id+":"+name+":"+money);
}
}catch (Exception e){
e.printStackTrace();
}finally {
/*将连接还回连接池中
*如果连接象是我们自己获取的一个连接对象,调用conn.close方法是将连接关闭还给数据库。
*如果连接是从连接池中获取的一个连接对象,由于连接池在将连接返回之前,对连接对象进行了改造,
*将连接对象的 close方法改造为了还连接到连接池中。因此同样是调用conn.close方法
*将连接还回池中
onn.close*/
JdbcUtil.close(rs,stat,conn);
}
}
}
方法二:在类目录下(开发时可以放在src或者类似的源码目录下), 添加一个c3p0-config.xml文件, 配置内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<c3p0-config>
<default-config>
<property name="driverClass">com.mysql.cj.jdbc.Driver</property>
<property name="jdbcUrl">jdbc:mysql://localhost:3306/jt_db?serverTimezone=Asia/Shanghai</property>
<property name="user">root</property>
<property name="password">root</property>
</default-config>
</c3p0-config>
注意: 该配置文件的位置和文件名都是固定的,将来c3p0程序底层会自动的到指定位置(src源码目录或者相似的源码目录下)寻找指定名称的文件(c3p0-config.xml)如果能够找到文件并读取文件中的配置(配置都要正确), 就能够连接上数据库,能够初始化一批连接放在连接池中, 否则将会抛出异常.
方法三:在类目录下(开发时可以放在src或者类似的源码目录下), 添加一个名称为c3p0.properties的文件, 配置内容如下:
c3p0.driverClass=com.mysql.cj.jdbc.Driver
c3p0.jdbcUrl=jdbc:mysql://localhost:3306/jt_db?serverTimezone=Asia/Shanghai&characterEncoding=utf-8
c3p0.user=root
c3p0.password=root
注意: 该配置文件的位置和文件名都是固定的,将来c3p0程序底层会自动的到指定位置(src源码目录或者相似的源码目录下)寻找指定名称的文件(c3p0.properties)如果能够找到文件并读取文件中的配置(配置都要正确), 就能够连接上数据库,能够初始化一批连接放在连接池中, 否则将会抛出异常.
网友评论