数据库连接池负责分配、管理和释放数据库连接,允许程序重复使用一个现有的数据库连接,而不是重复新建立一个。
![Uploading 连接池_413693.png . . .]
建立连接池就是在原来创建jdbc的基础上,把原先获得的Connection接口对象保存到一个list数组中。避免重复连接。
自定义连接池:
package com.whd.utils;
import java.util.*;
import java.sql.*;
/**
* @author Administrator
*自定义连接池
*/
public class MyDbPool {
private static String path,url,name,pass;
//存储当前的连接对象
private static List<Connection> list;
static {
ResourceBundle rs = ResourceBundle.getBundle("dbinfo");
path = rs.getString("driverpath");
url = rs.getString("dburl");
name = rs.getString("username");
pass = rs.getString("pass");
//list = new ArrayList<Connection>();
list = Collections.synchronizedList(new ArrayList<>());
try {
//加载驱动
Class.forName(path);
//创建5个连接对象
for(int i = 0;i < 5;i++){
list.add(DriverManager.getConnection(url,name,pass));
}
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
/**获取连接对象
* @return
*/
public static Connection getConn(){
if(list.size()>0){
return list.remove(0);
}else{
throw new RuntimeException("请先关闭连接对象!");
}
}
//销毁连接对象,其实就是再次添加进来
public static void destory(Connection conn){
list.add(list.size(), conn);
}
}
自定义jdbc工具类:
package com.whd.utils;
import java.sql.Connection;
import java.sql.SQLException;
import java.sql.Statement;
/**
* @author Administrator
*封装数据库工具类
*/
public class MyDbutils {
//连接对象
private static Connection conn;
//获取操作sql的语句
private static Statement stmt;
static {
conn = MyDbPool.getConn();
try {
stmt = conn.createStatement();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static void execute(String sql){
try {
stmt.execute(sql);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
//必须要关闭
public static void close(){
if(stmt != null){
try {
stmt.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
MyDbPool.destory(conn);
}
}
}
网友评论