在实现java数据库连接池之前,我们先了解什么是数据库连接池。
1.数据库连接池
数据库连接池负责分配、管理和释放数据库连接,它允许应用程序重复使用一个现有的数据库连接,而不是再重新建立一个;释放空闲时间超过最大空闲时间的数据库连接来避免因为没有释放数据库连接而引起的数据库连接遗漏。这项技术能明显提高对数据库操作的性能。
2.数据库连接池的优点
1.1 减少连接创建时间
1.2 简化的编程模式:当使用连接池时,每一个单独的线程能够像创建了一个自己的 JDBC 连接一样操作,允许用户直接使用JDBC编程技术。
3.自己实现连接池过程
3.1创建一个连接池类:
package JDBC.d1102.连接池;
import java.sql.Connection;
import java.util.ArrayList;
import java.util.List;
public class Pools{
private static Pools pools = new Pools();
List<MyConnection> list = new ArrayList<>();
{
for (int i = 0; i < 5; i++) {
MyConnection myConnection = new MyConnection();
// list.add放入创建的连接池对象
list.add(myConnection);
}
}
}
因为Connection 为接口,所以不能new,Connection也不是函数式接口,所以也不能利用匿名内部类来实现,
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
public class MyConnection {
String URL = "jdbc:mysql://localhost:3306/zz?useSSL=false";//库名
String USER = "root";//用户名
String PASSWORD = "123456";//密码
Connection connection=null;
//建立链接
private void createConnection(){
try {
Class.forName("com.mysql.jdbc.Driver");
connection = DriverManager.getConnection(URL, USER, PASSWORD);//获取到链接connection
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
}
//得到链接
public Connection getConnection() {
createConnection();//必须先建立连接
return connection;//再返回
}
}
3.2 我们建立一个ConnectionTest类测试数据池,即可完成数据库连接池
import java.sql.Connection;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.List;
public class ConnectionTest {
public static void main(String[] args) {
//例如我向employees中加入数据
Pool pool = new Pool();//创建一个线程池对象
List<Connection>list=pool.List;//用集合容器获取链接池中pool链接
Connection connection=list.get(0);//拿到链接
Statement statement=null;
try {
statement=connection.createStatement();//创建statement陈述语句
String sql="insert into employees values ('李四','经理',5);";//插入数据
int effectRow = statement.executeUpdate(sql);//执行sql语句,输出一个影响行数
if(effectRow>0){//如果影响行数大于0,输出插入成功,否则输入插入失败
System.out.println("插入成功");
}else{
System.out.println("插入失败");
}
} catch (SQLException e) {
e.printStackTrace();
}finally {
if(statement!=null){
try {
statement.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
}