数据库连接池
为什么要用数据库连接池
数据库的连接资源是非常珍贵的,但是频繁的连接数据库,关闭数据库,对数据库资源的消费是非常大的,所以我们要用到数据库连接池
环境搭建
1.导入druid的jar包
.
2.数据库源配置
在src根路径下创建db.properties文件,配置信息如下:
driverClassName=com.mysql.cj.jdbc.Driver
url = jdbc:mysql://127.0.0.1:3306/week6exam?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai
username = root
password = 123456
//初始化连接对象的数量
initialSize=10
//运行时的最大使用量
maxActive=30
//最小空闲的时间
minIdle=10
//最大等待时间
maxWait=2000
.
3.创建连接池
数据库连接工具包
package util;
import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Properties;
import javax.sql.DataSource;
import com.alibaba.druid.pool.DruidDataSourceFactory;
/**
* JDBC工具类: 连接数据库直接调用此工具类
*/
public class JDBCUtil {
private static DataSource dataSource;//静态的方法只能调用静态的语法
/**
* 连接数据库,获取连接对象connection
*
* @return 将连接对象connection返回到方法的调用处
*/
public static Connection getConnection() {
if(dataSource == null) {
try {
//1.建管道--读src根路径下的文件
InputStream input = Thread.currentThread().getContextClassLoader().getResourceAsStream("db.properties");
//2.创建properties对象
Properties properties = new Properties();
//3.把数据加载到properties
properties.load(input);
//4.创建数据库连接池对象dataSource
dataSource = DruidDataSourceFactory.createDataSource(properties);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
//5.从数据库连接池中取连接对象
Connection connection = null;
try {
connection = dataSource.getConnection();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
// System.out.println(dataSource);打印数据库连接池对象
return connection;
}
//下面为关闭连接,到此Druid配置完成
/**
* 关闭连接
*
* @param connection 连接对象 用完后需关闭
* @param pst 预编译对象
*/
public static void close(Connection connection, PreparedStatement pst) {
try {
if (pst != null) {
pst.close();
}
if (connection != null) {
connection.close();
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
/**
* 关闭连接
*
* @param connection 跟建立连接--得到连接对象 用完后需关闭
* @param pst 预编译对象
* @param rs 结果集对象 也需要关闭
*/
public static void close(Connection connection, PreparedStatement pst, ResultSet rs) {// 方法的重载
try {
if (rs != null) {
rs.close();
}
if (pst != null) {
pst.close();
}
if (connection != null) {
connection.close();
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}