java数据库连接池C3P0&Druid

数据库连接池

1.概念:用于存放数据库连接的容器
	 当系统初始化好后,容器悲怆将,容器会申请一些连接对象,当用户来访问数据库时,从容器中获取连接对象,用户访问完之后,将连接对象归还给容器.
2. 优点:节约资源,用户访问高效
3. 实现:
	1.标准接口DAtaSource javax.sql包下的,
		获取连接:getConnection();
		归还连接:如果连接对象Connection是从连接池种获取的,那么调用Connection.close()方法不会关闭连接,而是归还
	2.一般由数据库厂商来实现
		C3P0:数据库连接池技术
		Druid:数据库连接池技术,由阿里巴巴提供的
4.C3P0:数据库连接池技术
	**步骤**
		1:导入jar包(两个)c3p0-0.9.5.2.jar  	mchange-commons-java-0.2.12.jar (不要忘记导入jdbc的驱动包)
		2.定义配置文件:
			名称:c3p0.properties或者c3p0-config.xml
			路径:直接放到src目录下即可
		3.创建核心对象:数据库连接池对象ComboPooledDataSource
		4.获取连接:getConnection
package C3P0;

import com.mchange.v2.c3p0.ComboPooledDataSource;

import javax.sql.DataSource;
import java.sql.Connection;

/**
 * C3P0演示
 */
public class C3P0Demo1 {
    public static void main(String[]args)throws Exception{
        //创建数据库连接池对象
        DataSource ds=new ComboPooledDataSource();
        //获取连接对象
        Connection conn= ds.getConnection();
        //打印连接对象
        System.out.println(conn);
    }
}
5.Druid
		1.导入jar包druid-1.0.9.jar(以及jdbc)
		2.定义配置文件druid.properties(可以叫任意名称,可以放任意目录下,手动去加载)
		3.加载配置文件
		4.获取数据库连接池对象:通过工厂类来获取 DruidDataSourceFactory
		5.获取连接GetConnection
	**定义工具类
		定义一个类JDBCTrils静态代码块加载配置文件,初始化连接对象
		提供的方法:1.获取连接
				   2.释放资源
				   3.获取连接池的方法
package Druid;

import com.alibaba.druid.pool.DruidDataSource;
import com.alibaba.druid.pool.DruidDataSourceFactory;

import javax.sql.DataSource;
import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.util.Properties;

/**
 * Druid演示
 */
public class DruidDemo {
    public static void main(String[] args) throws Exception {
        //1导入jar包
        //2定义配置文件
        //加载配置文件
        Properties pro=new Properties();
        InputStream is= DruidDemo.class.getClassLoader().getResourceAsStream("druid.properties");
        pro.load(is);
        //获取连接池对象
        DataSource ds= DruidDataSourceFactory.createDataSource(pro);
        //获取连接
        Connection conn=ds.getConnection();

        System.out.println(conn);
    }
}

//工具类
package util;

import com.alibaba.druid.pool.DruidDataSourceFactory;
import com.alibaba.druid.util.JdbcUtils;
import jdk.nashorn.api.tree.ReturnTree;

import javax.sql.DataSource;
import java.io.IOException;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;

/**
 * Druid连接池工具类
 */
public class JFBCYtil {
    private static DataSource ds;
    static {
        try {
            //        1.j加载配置文件
            Properties pro=new Properties();
            pro.load(JdbcUtils.class.getClassLoader().getResourceAsStream("druid.properties"));
            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();
            }
        }
    }
    public static void close(ResultSet rs, Statement stmt, Connection conn){
        if(rs!=null){
            try {
                rs.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        if(stmt!=null){
            try {
                stmt.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        if(conn!=null){
            try {
                conn.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }
    //获取连接池的方法
    public static DataSource getDataSource(){
        return ds;
    }
}

package Druid;

import util.JFBCYtil;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;

/**
 * 实用util的工具类
 */
public class DruidDemo2 {
    public static void main(String[] args) {
        /**
         * 添加一条信息
         */
        //获取连接
        Connection conn=null;
        PreparedStatement pstmt=null;
        try {
            conn= JFBCYtil.getConnection();
            String sql="insert into user values(?,?,?)";
            //获取stmt对象
            pstmt=conn.prepareStatement(sql);
            //给?赋值
            pstmt.setString(1,"王五");
            pstmt.setInt(2,30);
            pstmt.setString(3,"男");
            int count=pstmt.executeUpdate();
            System.out.println(count);
        } catch (Exception e) {
            e.printStackTrace();
        }finally {
            JFBCYtil.close(pstmt,conn);
        }
    }
}

你可能感兴趣的:(java学习笔记)