数据库连接池
什么是数据库连接池
负责分配,管理和释放数据库链接的,也就是说,让jdbc配置数据库时更加简单,并且增加更多功能的一种技术。允许使用重复的数据库连接,整体看来,就是一个存放数据库连接的容器。
数据库连接池的基本思想
将数据库连接作为对象存储在内存中,需要数据库连接时再从池中取出一个已经建立连接的连接对象来使用。用户使用完毕后,连接池再收回连接对象,而不是销毁对象。
使用连接池的原因
简化数据库的连接,通常的数据库连接:
- TCP连接(启动mysql服务器)
- MySQL认证
在这里插入代码片public class BaseDao {
//数据库地址“jdbc:mysql://服务器域名:端口号/数据库名称”
private String url = "jdbc:mysql://localhost:3306/mydb?useUnicode=true&characterEncoding=utf-8";
//用户名
private String user = "root";
//用户密码
private String pwd = "";
//数据库链接对象
private java.sql.Connection conn;
//数据库命令执行对象
private PreparedStatement pstmt;
//数据库返回结果
private java.sql.ResultSet rs;
//静态代码块
static{
//1、加载驱动
try {
Class.forName("com.mysql.jdbc.Driver");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
//2、创建连接
private void getConnection(){
if(conn == null){
try {
conn = DriverManager.getConnection(url, user, pwd);
} catch (SQLException e) {
e.printStackTrace();
}
}
}
//执行读操作方法
public java.sql.ResultSet executeQuery(String query,
List<Object> params){
getConnection();
try {
//3、创建命令执行对象
pstmt = conn.prepareStatement(query);
//4、执行
if(params!=null && params.size()>0){
for(int i=0;i<params.size();i++){
pstmt.setObject(i+1, params.get(i));
}
}
rs = pstmt.executeQuery();
} catch (SQLException e) {
e.printStackTrace();
}
return rs;
}
//执行写操作方法
public int executeUpdate(String query,
List<Object> params){
int result = 0;
getConnection();
try {
//3、创建命令执行对象
pstmt = conn.prepareStatement(query);
//4、执行
if(params!=null && params.size()>0){
for(int i=0;i<params.size();i++){
pstmt.setObject(i+1, params.get(i));
}
}
//5、处理结果
result = pstmt.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
}finally{
//6、释放资源
this.close();
}
return result;
}
//关闭资源
public void close(){
try {
if(rs!=null){
rs.close();
rs = null;
}
if(pstmt!=null){
pstmt.close();
pstmt = null;
}
if(conn!=null){
conn.close();
conn = null;
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
源代码连接:https://blog.csdn.net/qq_38261137/article/details/80337423
- 加载驱动(中间件)
- 创建连接(数据库的地址(服务器域名,端口号,数据库名称,其他设置),用户名,密码)
- 创建命令执行对象(丢入sql语句)
- 执行并处理结果
- 释放资源(按照出栈顺序释放)
实在是太麻烦了,要使用很多次才能完全记住这些东西,而且一个不小心就会出错。
通过使用连接池,就可以简化这些步骤,连接建立一次后可以使用很多次,比较方便。
连接池的使用
导入依赖(c3p0为例子)
<dependency>
<--!数据库连接-->
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.12</version>
</dependency>
<dependency>
<groupId>com.mchange</groupId>
<artifactId>c3p0</artifactId>
<version>0.9.5.2</version>
</dependency>
参考:
数据库连接池
数据库连接池原理+介绍