什么是连接池
没有连接池的情况:每次用户都要创建数据库连接对象,然后销毁对象
数据库连接池:
池: 保存数据的对象
连接池: 保存数据库连接对象的容器
作用:
- 拥有多个数据库对象,用时即拿
- 用完后并不直接释放掉对象,而是放入池中方便下次使用
池技术的优势: 消除库对象创建所带来的延迟,从而提高系统的性能
数据连接池当中的属性:
- 1.连接数据时需要的4 要素:驱动名称,数据库地址,用户名,密码
- 2.初始化连接数
- 3.最大连接数
- 4.最小连接数
- 5.最大空闲时间:如果获取了连接对象,在指定时间内没有任何操作,就会自动释放连接
- 6.最大等待时间:在指定时间内,尝试获取连接,若果超出指定时间,就会提示获取失败
连接池的使用
简介:
连接池是使用java.sql.DataSource接口来表示连接池
DataSource 和 jdbc 一样,也只是提供一个接口,由第三方组织提供
常见连接池;
- DBCP:Spring推荐
- Druid:阿里巴巴提供(荐用)
使用连接池与不使用连接池的区别
- 获取方式不同
- 传统: Connection conn = DriverManner.getConnection(url, user,password);
- 连接池 ; Connection conn = DataSource对象.getConnection();
- 释放资源不同
- 传统: 和数据断开 conn.close();
- 连接池: 把数据库对象还给连接池,给下一个人来使用
连接池操作:
- 主要学习创建DataSource对象,再从DataSource对象中获取Connection 对象
- 都是第三方提供好的,直接调用即可
- 连接之后,操作和以前一样
- 不同的数据库连接池,就是创建的DataSource上不一样
创建DataSource
-
导入jar包
- 若是 dbcp ,则需要下载commons-dbcp-1.4.jar 和 commons-pool-1.6.jar ,如何下载jar包:https://blog.csdn.net/be_your1/article/details/88110883
- 若是 druid ,去github官网下载 :https://github.com/alibaba/druid/
下载完毕之后,导入到项目的 lib 文件夹中,和导入 mysql-connector-java-8.0.25.jar 操作一样
-
获取连接对象
直接上代码:
package com.zhj.jdbc.test; import com.alibaba.druid.pool.DruidDataSource; import com.alibaba.druid.pool.DruidPooledConnection; import org.apache.commons.dbcp.BasicDataSource; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; public class DBCPTest { public static void main(String[] args) { String driverName = "com.mysql.jdbc.Driver"; String url = "jdbc:mysql://localhost:3306/stus?rewriteBatchedStatements=true"; String user = "root"; String password = "034312"; DruidDataSource ds = new DruidDataSource(); // BasicDataSource ds = new BasicDataSource(); ds.setDriverClassName(driverName); ds.setUrl(url); ds.setUsername(user); ds.setPassword(password); try { // 建立连接,下面一起常规操作,只是获取conn 对象不同 Connection conn = ds.getConnection(); // 创建语句 String sql = "select * from student"; // 执行语句 PreparedStatement ps = conn.prepareStatement(sql); ResultSet res = ps.executeQuery(); if(res.next()){ System.out.println(res.getString(2)); System.out.println(res.getInt(3)); } } catch (SQLException throwables) { throwables.printStackTrace(); } // 释放资源 } }
配置文件
什么是配置文件?
资源文件,以.properties作为扩展名的的文件
如何用?
创建.properties
以 key = value 的形式存储
通常在项目目录下创建一个 source 文件夹,在里面创建.properties 文件
读取配置文件,获取conn对象
- 创建配置文件 db.properties
driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/stus?rewriteBatchedStatements=true
username=root
password=034312
注意: 这里的 属性名(key) 的规范写法,使用别的名称可能会报错
- 读取文件
@Test
public void getConnectionTest(){
Properties p = new Properties();
FileInputStream fis = null;
Connection conn = null;
PreparedStatement ps = null;
ResultSet res = null;
try {
fis = new FileInputStream("source/db.properties");
p.load(fis);
//System.out.println(p.get("driver"));
//System.out.println(p.get("url"));
//System.out.println(p.get("username"));
//System.out.println(p.get("password"));
DataSource ds = DruidDataSourceFactory.createDataSource(p);
// // 建立连接
conn = ds.getConnection();
// 创建语句
String sql = "select * from student";
// 执行语句
ps = conn.prepareStatement(sql);
res = ps.executeQuery();
if (res.next()) {
System.out.println(res.getString(2));
System.out.println(res.getInt(3));
}
} catch (Exception e) {
e.printStackTrace();
}finally {
// 释放资源
try {
if(conn != null){
conn.close();
}
} catch (SQLException throwables) {
throwables.printStackTrace();
}
}
}