代码改变世界

三种连接池连接数据库

2020-03-23 10:19  默默不语  阅读(284)  评论(0编辑  收藏  举报
package util;

import java.beans.PropertyVetoException;
import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.Properties;

import javax.sql.DataSource;

import org.apache.commons.dbcp2.BasicDataSource;

import com.alibaba.druid.pool.DruidDataSource;
import com.mchange.v2.c3p0.ComboPooledDataSource;

public class DBUtil2 {
    //key,value都是String类型的map
    private static Properties p = new Properties();
    
    static {
        //通过当前线程获取一个类加载器,然后通过这个类加载器加载配置文件到流里面
        //默认以src为根路径
        InputStream is = Thread.currentThread().getContextClassLoader().getResourceAsStream("jdbc.properties");
        //properties通过加载流的方式进行初始化
        try {
            p.load(is);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    
    /**
     *  获取连接
     * @return
     * @throws PropertyVetoException 
     */
    public static Connection getConn() {
        try {
            //加载驱动
            Class.forName(p.getProperty("jdbc.driver"));
        } catch (ClassNotFoundException cnfe) {
            System.out.println("Error loading driver: " + cnfe);
        }
        Connection conn = null;
        try {
            //数据源是一个名为:DataSource的接口,我们要说的就是这个接口的三种实现方式
            /*
             * 1.c3p0连接池创建数据源的方式
             */
//            ComboPooledDataSource cpds = new ComboPooledDataSource();//向上造型
//            cpds.setDriverClass("oracle.jdbc.OracleDriver");
//            cpds.setJdbcUrl("jdbc:oracle:thin:@127.0.0.1:1521:orcl");
//            cpds.setUser("scott");
//            cpds.setPassword("Oracle11g");
//            //cpds.setMaxPoolSize(5);
//            conn = cpds.getConnection();
            
            /*
             * 2.dbcp连接池创建数据源的方法
             */
//            BasicDataSource bds = new BasicDataSource();
//            bds.setDriverClassName("oracle.jdbc.OracleDriver");
//            bds.setUrl("jdbc:oracle:thin:@127.0.0.1:1521:orcl");
//            bds.setUsername("scott");
//            bds.setPassword("Oracle11g");
//            conn = bds.getConnection();
            
            /*
             * 3.druid连接池创建数据源的方法
             */
            DruidDataSource dds = new DruidDataSource();
            dds.setDriverClassName("oracle.jdbc.OracleDriver");
            dds.setUrl("jdbc:oracle:thin:@127.0.0.1:1521:orcl");
            dds.setUsername("scott");
            dds.setPassword("Oracle11g");
            conn = dds.getConnection();
            
            //DriverManager工具类getConnection静态方法来获取连接Connection(代码已经和数据库建立起了连接)
//            conn = DriverManager.getConnection(p.getProperty("jdbc.url"), p.getProperty("jdbc.username"), p.getProperty("jdbc.password"));
        } catch (SQLException e) {
            e.printStackTrace();
//        } catch (PropertyVetoException e) {
//            e.printStackTrace();
        }
        return conn;
    }
    /**
     * 鍏抽棴杩炴帴
     */
    public static void closeConn(Connection conn) {
        if (conn != null) {
            try {
                conn.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }
}