数据库连接池

数据库连接池负责分配、管理和释放数据库连接,允许程序重复使用一个现有的数据库连接,而不是重复新建立一个。
![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 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();
        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);
        }
    }
}

你可能感兴趣的:(数据库连接池)