- 数据库连接池(存储多个连接对象,复用连接对象)
概念:一个容器(集合),存放数据库连接的容器
//实现连接池 Interface DataSource 数据源(连接对象)
//标准接口: javax.sql包下的 DataSource
// 方法:
// 获取连接:getConnection()
// 归还连接:若连接对象是从连接池中获取的 connection.close()不会再关闭连接,而是归还到连接池
// 一般由数据库厂商实现
// 1.c3p0 : 旧的数据库连接池技术
// 2.Druid : 阿里巴巴提供
c3p0:
//1.导入jar包
//2.定义配置文件:c3p0-config.xml
//3.创建核心对象 ComboPooledDataSource
//4.获取连接:getConnection
Druid:
/**
* 步骤:
* 1. 导入jar包 Druid
* 2.定义配置文件 : properties形式 可以任意名称和目录
* 3.加载配置文件
* 4.获取数据库连接池对象: 通过工厂获取 DruidDataSourceFactory
* 5.获取连接: getConnection
*/
public static void main(String[] args) throws Exception {
// 加载配置文件
Properties pro = new Properties();
InputStream is = DruidJDBC.class.getClassLoader().getResourceAsStream("druid.properties");
pro.load(is);
// 获取连接池对象
DataSource ds = DruidDataSourceFactory.createDataSource(pro);
// 获取连接
Connection conn = ds.getConnection();
System.out.println(conn);
}
druid.properties
driverClassName = com.mysql.jdbc.Driver
url = jdbc:mysql://localhost:3306/mydb
username = root
password = ss
# 初始化连接数
initialSize = 5
# 最大连接数
maxActive = 10
maxWait = 3000
- Druid工具类DruidJDBCUtils
import com.alibaba.druid.pool.DruidDataSourceFactory;
import javax.sql.DataSource;
import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;
/**
* @author :yangzhipeng
* @date : 2023/3/11 0:49
* Description :
*/
public class DruidJDBCUtils {
/**
* 1.定义JDBCUtils类
* 2.提供静态代码块加载配置文件,初始化连接池对象
* 3.提供方法:获取连接,释放资源,获取连接池
*/
// 定义成员变量 DataSource
private static DataSource ds;
// 加载配置文件,初始化连接池对象
static {
// 加载配置文件
Properties pro = new Properties();
InputStream is = DruidJDBC.class.getClassLoader().getResourceAsStream("druid.properties");
try {
pro.load(is);
//获取DataSource
ds = DruidDataSourceFactory.createDataSource(pro);
} catch (IOException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 获取连接的方法
*/
public static Connection getConnection() throws SQLException {
return ds.getConnection();
}
/**
* 释放资源
*/
public static void close(Statement stmt,Connection conn){
if (stmt != null){
try {
stmt.close();
} catch (SQLException throwables) {
throwables.printStackTrace();
}
}
if (conn != null){
try {
conn.close(); //归还连接
} catch (SQLException throwables) {
throwables.printStackTrace();
}
}
}
public static void close(ResultSet rs,Statement stmt, Connection conn){
if (rs != null){
try {
rs.close();
} catch (SQLException throwables) {
throwables.printStackTrace();
}
}
close(stmt,conn);
}
// 获取连接池的方法
public static DataSource getDataSource(){
return ds;
}
}
- DruidJDBC测试类
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
/**
* @author :yangzhipeng
* @date : 2023/3/11 1:00
* Description : DruidJDBC测试类
*/
public class DruidUtilsTest {
public static void main(String[] args) {
Connection conn = null;
PreparedStatement pstmt = null;
ResultSet rs = null;
try {
conn = DruidJDBCUtils.getConnection();
String sql = "select ?";
pstmt = conn.prepareStatement(sql);
pstmt.setInt(1,1);
rs = pstmt.executeQuery();
while (rs.next()){
System.out.println(rs.getString(1));
}
} catch (SQLException throwables) {
throwables.printStackTrace();
}finally {
DruidJDBCUtils.close(rs,pstmt,conn);
}
}
}
- Spring JDBC : JDBC Template 封装JDBC
*Spring框架对JDBC的简单封装。提供JDBCTemplate对对象简化JDBC开发步骤: 1. 导入jar包 2. 创建JdbcTemplate对象。依赖于数据源DataSource 3. 调用JdbcTemplate方法完成CRUD操作 * update() 增删改 * queryForMap() 结果封装map集合 * queryForList()结果封装为list集合 * query()结果封装为JavaBean对象 * queryForObject 封装成对象