文章目录
- 一、连接池
- 1、什么是连接池
- 2、为什么要用连接池
- 二、德鲁伊连接池(druid)
- 1.介绍
- 2.代码实操
一、连接池
1、什么是连接池
简单来说就是一组连接组成的一个池子(集合),称为连接池。
连接池是创建和管理一个连接的缓冲池技术。
2、为什么要用连接池
我们原先在连接数据库时都是用到一次,创建一次连接,不用就关闭,再用的时候再连接。但是一旦访问数据库的请求多了起来,就会很容易占用服务器资源,还耗时。
使用连接池就能很好的解决这种问题。
连接池技术是在服务启动的时候就事先在连接池中放入一定数量的连接对象,当你需要的时候,直接从连接池中拿已经创建好的对象而不是临时去创建一个连接,这样就能提高效率。
二、德鲁伊连接池(druid)
1.介绍
Druid是阿里巴巴开源平台上的一个项目,它结合了C3P0、DBCP、Proxool等DB池的优点,同时加入了日志监控,可以很好的监控DB池连接和SQL的执行情况,可以说是针对监控而生的DB连接池,也是目前最好的数据库连接池之一。
2.代码实操
(1)maven引入jar包
<dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId><version>1.1.6</version></dependency>//jdbc要和自己数据库版本匹配<dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.27</version></dependency>
(2)在src下新建 .properties配置文件
编写基本配置参数
url=jdbc:mysql://localhost:3306/login
username=root
password=2020051034
driverClassName=com.mysql.jdbc.Driver
//初始化时建立物理连接的个数
initialSize=5
//连接池能维持的最大连接数
maxActive=10
//获取连接时最大等待时间,单位毫秒
maxWait=2000
点击了解更多配置文件的参数详情
(3)编写DBUtils工具类,通过druid连接池连接数据库并封装查询操做
import com.alibaba.druid.pool.DruidDataSourceFactory;
import javax.sql.DataSource;
import java.io.IOException;
import java.io.InputStream;
import java.sql.*;
import java.util.Properties;public class DBUtils {static Connection conn;static PreparedStatement presql;static ResultSet rs;static String selectsql="SELECT * FROM student where name=? ";static String n;//namepublic static void getconnection() {//1.从类路径下加载配置文件,获取一个输入流。如果不指定路径,默认是读取同一个包下资源文件InputStream inputStream = DBUtils.class.getResourceAsStream("/druid.properties");//2.使用Properties对象的方法将配置文件中属性加载到Properties对象中Properties properties = new Properties();//加载了配置文件中所有的属性try {properties.load(inputStream);} catch (IOException e) {e.printStackTrace();}//3.通过druid的工厂类创建连接池DataSource dataSource = null;try {dataSource = DruidDataSourceFactory.createDataSource(properties);} catch (Exception e) {e.printStackTrace();}//4.从连接池中获取连接对象try {conn=dataSource.getConnection();} catch (SQLException e) {e.printStackTrace();}}//编写select操作方法public static ResultSet select(String a){//调用上面自己封装的getconnection方法连接数据库getconnection();//将测试类中传入的name参数赋值给nn=a;//通过预处理对象处理sql语句try {presql=conn.prepareStatement(selectsql);presql.setString(1,n);} catch (SQLException e) {e.printStackTrace();}//获取结果集对象try {rs=presql.executeQuery();} catch (SQLException e) {e.printStackTrace();}//返回结果集对象return rs;}}
(4)编写测试类
import org.junit.Test;
import java.sql.ResultSet;
import java.sql.SQLException;public class test {@Testpublic void test2() throws SQLException {//通过工具类得到结果集对象ResultSet res=DBUtils.select("dwd");//输出当前连接池中我们所用的连接对象System.out.println(DBUtils.conn);while (res.next()){//打印我们从数据库中得到的数据System.out.println("名字:"+res.getString("name"));System.out.println("密码:"+res.getString("password"));System.out.println("成绩:"+res.getString("score"));}//关闭连接,连接对象回到连接池DBUtils.conn.close();}
}
(5)运行结果