数据库连接池

1.基本概念

*概念:其实就是一个容器 (集合),存放数据库连接的容器。
		 当系统初始化好后,容器被创建,容器中会申请一些连接对象, 当用户来访问数据库时,从容器中获取连接对象,用户访问完之后,会将连接对象归还给容器。
	*好处:
		1.节约资源
		2.用户访问高效
	1.标准接口: Datasource
		javax.sql包下的
		1.方法:
			*获取连接: getConnection()
			*归还连接: Connection.close()。
            *如果连接对象Connection是从连接池中获取的,那么调用Connection.close()方法,则不会再关闭连接了,而是归还连接。
		2. 一般我们不去实现它,有数据库厂商来实现
		3. C3P0 :数据库连接池技术
		4. Druid :数据库连接池实现技术,由阿里巴巴提供的

2.C3p0

 基本使用方法:
 	*步骤:
		1.导入jar包(两个) c3p0-0.9.5.2.jar mchange-commons-java-0.2.12.jar ,
			*不要忘记导入数据库驱动jar包
		2.定义配置文件:
			*名称: c3p0.properties或者c3pθ-config.xml
			*路径:直接将文件放在src目录下即可。
		3.创建核心对象数据库连接池对象ComboPooledDataSource
		4.获取连接: getConnection         

3.Druid

Druid:数据库连接池技术,由阿里巴巴提供的
	*步骤:	
	  	1.导入jar包 druid-1.2.6.jar
	  	2.定义配置文件
	  		*是properties形式的
	  		*可以叫任意名称,可以放在任意目录下
    	3.加载配置文件。Properties
    	4.获取数据库连接池对象:通过工厂类来获取 Druid DataSourceFactory
        5.获取连接:getConnection()
	*定义工具类
        1.定义一个工具类 JDBCUtils
        2.提供静态代码块加载配置文件,初始化连接池对象。
        3.提供方法
        	3.1.获取连接方法:通过数据库连接池获取连接
            3.2.释放资源
            3.3.获取连接池的方法

*练习:

 public void Test() throws Exception {
       //1.导入jar包 druid-1.2.6.jar
       //2.定义配置文件properties
       //3.加载配置文件
       Properties prs =new Properties();
       InputStream is = DruidDemo.class.getClassLoader().getResourceAsStream("druid.properties");
       prs.load(is);
       //4.获取连接池对象
       DataSource ds = DruidDataSourceFactory.createDataSource(prs);
       //5.获取连接
       Connection conn = ds.getConnection();
       System.out.println(conn);
     }

3.1Druid工具类

/**
 * Druid 工具类
 */

public class JDBCUtils {
    //1.定义成员变量 DataSource
    private  static DataSource ds;

    static {

        try {
            //1.加载配置文件
            Properties pro = new Properties();
            InputStream is = JDBCUtils.class.getClassLoader().getResourceAsStream("druid.properties");
            pro.load(is);
            //2.获取dataSource
            ds = DruidDataSourceFactory.createDataSource(pro);
        } catch (IOException e) {
            e.printStackTrace();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    /**
     * 获取连接
     */
    public static Connection getConnection() throws SQLException {
        return ds.getConnection();
    }
    /**
     * 释放资源
     */
    public static void close(Statement stmt,Connection conn){
       /* if (stmt!=null){
            try {
                stmt.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        if (conn!=null){
            try {
                conn.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }*/
        close(null,stmt,conn);
    }
    public static void close(ResultSet rs, Statement stmt, Connection conn){
        if (stmt!=null){
            try {
                stmt.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        if (conn!=null){
            try {
                conn.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        if (rs!=null){
            try {
                rs.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }
    /**
     * 获取连接池的方法
     */
    public static DataSource getDataSource(){
        return ds;
    }
}

3.2Druid工具类测试

/**
 * 使用新的工具类
 */
public class DruidDemo2 {
    @Test
    public void Test(){
        /**
         * 完成添加记录
         */
        Connection connection =null;
        PreparedStatement pstmt =null;
        //1.获取连接
        try {
            connection = JDBCUtils.getConnection();
            //2.定义sql
            String sql ="insert into user values(null,?,?)";
            //3.获取pstmt对象
            pstmt = connection.prepareStatement(sql);
            //给问好赋值
            pstmt.setString(1,"wangwu");
            pstmt.setInt(2,789);
            //执行Sql
            int i = pstmt.executeUpdate();
            System.out.println(i);
        } catch (SQLException e) {
            e.printStackTrace();
        }finally {
            //释放资源
            JDBCUtils.close(pstmt,connection);
        }
    }
}
posted @ 2021-11-05 20:53  AlsosHleeu  阅读(28)  评论(0)    收藏  举报