WEB03_Day02-数据库连接池、SQL注入、JDBC批量操作、分页查询、JDBC获取新增数据的自增主键值
一、数据库连接池
数据库连接池就是一个包含多个数据库连接对象的容器。
1.2 优势:
-
每个连接对象都是需要进行创建,使用,关闭,销毁,如果反复的对于连接对象进行频繁创建和销毁操作,可能会导致程序出现内存泄漏和内存溢出的情况发生。
-
需要创建多个连接对象,此时使用数据库连接池可以预先进行创建多个数据库连接对象,当使用的时候,可以直接从数据库连接池中进行获取,使用完毕以后,会进行归还,该操作可以让对象进行反复的使用,进行可以提高程序的执行效率,避免内存不足。
1.3 数据库连接池的使用
-
在项目的 pom.xml 文件中导入数据库连接池的 jar 包
当前所使用的数据库连接池为 dbcp,后期还学学到阿里公司自研的数据库连接池 druid。DBCP(DataBase Collection Pool)
<!-- commons-dbcp 1.4 -->
<dependency>
<groupId>commons-dbcp</groupId>
<artifactId>commons-dbcp</artifactId>
<version>1.4</version>
</dependency>
-
重构 DBUtils 工具类,结合 DBCP数据库连接池进行使用
package cn.tedu.dbcp;
import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.util.Properties;
import org.apache.commons.dbcp.BasicDataSource;
/**
* JDBC连接MySQL工具类
* @author Tedu
*
*/
public class DBUtils {
//声明一个数据库连接池对象
private static BasicDataSource ds;
//将初始化数据库连接池对象的操作书写到静态块中
static {
//1.进行解析jdbc.properties配置文件,用户获取里面的连接参数
//1.1获取输入流对象,用户读取项目的配置文件(磁盘->内存)
InputStream in = DBUtils.class.getClassLoader().getResourceAsStream("jdbc.properties");
//1.2使用Properties对象进行解析配置文件
Properties p = new Properties();
//1.3 加载配置文件的输入流
try {
p.load(in);
} catch (IOException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
//2.使用解析得到的参数值进行获取连接对象
String driver = p.getProperty("driver");
String url = p.getProperty("url");
String userName = p.getProperty("username");
String password = p.getProperty("password");
//创建数据库连接池对象,并将链接参数赋值给数据库连接池
ds = new BasicDataSource();
ds.setDriverClassName(driver);
ds.setUrl(url);
ds.setUsername(userName);
ds.setPassword(password);
//设置数据库连接池的初始数量
ds.setInitialSize(5);
//设置数据库连接池的最大活跃数量
ds.setMaxActive(5);
//设置最大的空闲连接数量