Oracle连接池,待完善。

来源:互联网 发布:慕课网 java视频教材 编辑:程序博客网 时间:2024/05/01 02:35
 package java_package;

import java.sql.Connection;
import java.sql.DriverManager;
import java.util.ArrayList;
import java.util.List;

public class DBConnectionPool {
    
    
    /**
     * Oracle注册驱动字符串
     */
    private final static String DBDriver = "oracle.jdbc.driver.OracleDriver";
    /**
     * Oracle连接数据库字符串
     */
    private final static String OracleConnect="jdbc:oracle:thin:@127.0.0.1:1521:OracleDB";
    /**
     * Oracle 账户
     */
    private final static String UID = "zh";
    /**
     * Oracle 密码
     */
    private final static String UPASS = "123";
    /**
     * 连接池的增量
     */
    private final static int ConnectionAddNumber = 5;
    /**
     * 连接池的初始数量
     */
    private final static int ConnectionFrist = 2;
    /**
     * 连接池的最大数量
     */
    private final static int ConnectionMAX = 50;
    /**
     * 数据库连接的真正数量
     */
    private static int Real_Connection = 0;
    
    private static boolean IsFrist = true;
    /**
     * 数据库连接池
     */
    public static  List<Connection> list_Connection = new ArrayList<Connection>();
    /**
     * 连接池初始化与创建
     */
    private static void ListCreateConnection()
    {
        if(IsFrist) //初始化添加
        {
            for(int i=0;i<ConnectionFrist;i++)
            {
                try
                {
                    list_Connection.add(CreateConnection());
                    Real_Connection++;
                }
                catch(Exception e){System.out.println("Error:"+e.getMessage());}
                IsFrist = false;
            }
        }
        else if(Real_Connection < ConnectionMAX)
        {
            int size = ConnectionMAX-Real_Connection;
            int number = size>=ConnectionAddNumber?ConnectionAddNumber:size;
            for(int i = 0;i<number;i++)
            {
                try
                {
                list_Connection.add(CreateConnection());
                Real_Connection++;
                }
                catch(Exception e){System.out.println(e.getMessage());}
            }
        }
        else
        {
            System.out.println("连接池超出多大上限:"+ConnectionMAX);
        }
    }
    /**
     * 创建Connection对象
     * @return 返回Connection一个实例化对象
     * @throws Exception
     */
    private static Connection CreateConnection() throws Exception
    {
        Connection conn = null;
        Class.forName(DBDriver);
        conn = DriverManager.getConnection(OracleConnect,UID,UPASS);
        return conn;
    }
    /**
     * 获得一个OracleConnection实例化对象
     * @return
     */
    public static Connection GetConnection()
    {
        Connection conn = null;
        if(list_Connection.size()==0)
        {
            ListCreateConnection();
        }
        conn = list_Connection.get(0);
        list_Connection.remove(0);
        return conn;
    }
    /**
     * (关闭)OracleConnection 实例化对象[非销毁]
     * @param conn
     */
    public static void  CloseConnection(Connection conn)
    {
        if(conn!=null)
        {
            list_Connection.add(conn);
        }
    }
    /**
     * 销毁连接池中的所有连接
     */
    public static void Dispose()
    {
        for(int i =0;i<list_Connection.size();i++)
        {
            try{
            list_Connection.get(i).close();}catch (Exception e) {
                continue;
            }
        }
        
    }

}


//程序需要导入Oracle驱动包:classes12.jar



原创粉丝点击