目录
数据库连接池
connection是一种稀有资源,一个连接建立就创造了一个资源
jdbc使用数据库连接池的必要性
在使用基于web程序的数据库连接
- 在主程序中建立连接
- 执行SQL
- 断开连接
所有的jdbc连接通过DriverManager.getConnection
用完的连接不要被垃圾回收,能够重复使用
池化思想
每次去初始化一个连接池,连接池中会有很多个连接等待被使用
使用完连接之后,不需要关闭连接,只需要把连接还回到连接池
还回到连接池的操作不需要我们手动控制
设置一些属性,最大等待时间
比较常见的数据库连接池
- C3P0:2代数据库连接池,太老了
- DBCP:2代数据库连接池,太老了
- Druid(德鲁伊)数据库连接池,最好用的连接池
整合了C3P0和DBCP各自的优点
加入了日志监控,可以监控SQL语句的执行情况 - Hikari(光),目前最快的连接池,spring boot默认的连接池
必须有对应的属性文件
.properties
约定>配置>编码
德鲁伊数据库连接池
import org.junit.Test;
import java.io.IOException;
import java.util.Properties;
public class Ch01 {
@Test
public void test01() throws IOException, SQLException {
Properties properties = new Properties();
properties.load(Ch01.class.getClassLoader().getResourceAsStream("druid.properties"));
DruidDataSource druidDataSource = new DruidDataSource();
druidDataSource.configFromPropety(properties);
System.out.println(druidDataSource.getConnection());
System.out.println(druidDataSource.getCreateCount());
}
}
配置文件
druid.url=jdbc:mysql://127.0.0.1:3306/jsoft?useUnicode=true&characterEncoding=utf8
druid.username=root
druid.password=123456
druid.driverName=com.mysql.jdbc.Driver
druid.initialSize=10
druid.maxActive=20
druid.maxWait=20
hikari数据库连接池
import com.zaxxer.hikari.HikariConfig;
import com.zaxxer.hikari.HikariDataSource;
import org.junit.Test;
import java.io.IOException;
import java.sql.SQLException;
import java.util.Properties;
public class Ch02 {
@Test
public void test01() throws IOException, SQLException {
Properties properties = new Properties();
properties.load(Ch01.class.getClassLoader().getResourceAsStream("hikari.properties"));
HikariConfig hikariConfig = new HikariConfig(properties);
HikariDataSource hikariDataSource = new HikariDataSource(hikariConfig);
System.out.println(hikariDataSource.getConnection());
}
}
配置文件
jdbcUrl=jdbc:mysql://127.0.0.1:3306/jsoft?useUnicode=true&characterEncoding=utf8
username=root
password=123456
driverClassName=com.mysql.jdbc.Driver
获取连接
import com.jsoft.util.BaseDao;
import org.junit.Test;
import java.sql.Connection;
import java.sql.SQLException;
public class Ch03 {
@Test
public void test01() {
try {
Connection connection = BaseDao.DATA_SOURCE.getConnection();
} catch (SQLException e) {
throw new RuntimeException(e);
}
}
}
DBUtils
需要引入一个jar包
import com.jsoft.morning.demo2.Teacher;
import com.jsoft.util.BaseDao;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanHandler;
import org.apache.commons.dbutils.handlers.BeanListHandler;
import org.junit.Test;
import java.sql.SQLException;
import java.util.List;
public class Ch01 {
@Test
public void test03() throws SQLException {
QueryRunner runner = new QueryRunner(BaseDao.DATA_SOURCE);
int i = runner.update("update teacher set name = ? where id = ?", "mmm", 6);
System.out.println(i);
}
/**
* 查询一个记录
*/
@Test
public void test02() throws SQLException {
QueryRunner runner = new QueryRunner(BaseDao.DATA_SOURCE);
Teacher teacher = runner.query("select * from teacher where id = ?", new BeanHandler<>(Teacher.class), 1);
System.out.println(teacher);
}
/**
* 查询多个记录
* @throws SQLException
*/
@Test
public void test01() throws SQLException {
// 要使用DBUtils使用的是一个类
// 传入的是一个数据源DataSource,不是一个Connection
QueryRunner runner = new QueryRunner(BaseDao.DATA_SOURCE);
// 查询多个记录
List<Teacher> teachers = runner.query("select * from teacher", new BeanListHandler<>(Teacher.class));
System.out.println(teachers);
}
}
标签:22,08,SQLException,2022,new,Test,import,数据库,连接池
From: https://www.cnblogs.com/lurui711/p/16614283.html