连接池-DBCP-C3P0

来源:互联网 发布:淘宝千牛客服怎么设置 编辑:程序博客网 时间:2024/06/07 13:55
A:DBCP:是Apache软件基金组织下的开源连接池实现,使用DBCP数据源,应用程序应在系统中增加如下两个jar文件:
    Commons-dbcp.jar:连接池的实现
    Commons-pool.jar:连接池实现的依赖库

B:Tomcat的连接池正是采用DBCP连接池来实现,该数据库连接池既可以与应用整合使用,也可以由程序独立使用

C:DBCP连接池应用如下(之前需要在项目下的src下创建dbcpconfig.properties来存储配置信息):

    //先得到连接池
   
private static DataSource dataSource;

    static{

        try {
            //创建properties对象,来获取配置文件中的信息
            Properties pro=new Properties();
            pro.load(DBCPUtil.class.getResourceAsStream("dbconfig.properties"));
            //得到连接池对象,同时获取配置文件中的信息给连接池使用
            dataSource=BasicDataSourceFactory.createDataSource(pro);
        } catch (Exception e) {
            throw new RuntimeException("连接池初始化失败");
        }
    }

    public static Connection getConnection() throws SQLException
    {
        return dataSource.getConnection();
    }

    public static void release(Connection conn,ResultSet rs,PreparedStatement ps)
    {
            try {
                if (conn!=null) {
                    conn.close();
                }
                if (rs!=null) {
                    rs.close();
                }
                if (ps!=null) {
                    ps.close();
                }
            } catch (SQLException e) {
                e.printStackTrace();
            }
    }


    //在调用connection对象时,可以直接通过类调用
    
public static void main(String[] args) {
        Connection conn=null;
        PreparedStatement ps=null;

        try {
            conn=DBCPUtil.getConnection();
            String sql="";
            ps=conn.prepareStatement(sql);

            ps.setString(1,"");
            //.....
            ps.executeUpdate();

        } catch (SQLException e) {
            e.printStackTrace();
        };
    }


D:C3P0:是一个开源的JDBC连接池,它实现了数据源和JNDI(是 Java 命名与目录接口(Java Naming and Directory Interface)),支持JDBC3和JDBC2的标志,目前使用它的开源项目有Hibernate,spring等

E:C3P0和dbcp的区别:dbcp没有自动回收空闲连接的功能,C3P0有自动回收空闲连接功能

F:C3P0:建立C3P0连接池需要在事先在项目下的src下创建一个名为c3p0-config.xml的XML文档,需要
导入c3p0-jar包

H:配置信息c3p0-config.xml内容如下:
   
<?xml version="1.0" encoding="UTF-8"?>
<c3p0-config>
  <default-config>
    <property name="driverClass">com.mysql.jdbc.Driver</property>
    <property name="jdbcUrl">jdbc:mysql://localhost:3306/db1</property>
    <property name="user">root</property>
    <property name="password">root</property>

    <property name="initialPoolSize">10</property>
    <property name="maxIdleTime">30</property>
    <property name="maxPoolSize">100</property>
    <property name="minPoolSize">10</property>
    <property name="maxStatements">200</property>

    <user-overrides user="test-user">
      <property name="maxPoolSize">10</property>
      <property name="minPoolSize">1</property>
      <property name="maxStatements">0</property>
    </user-overrides>

  </default-config>

</c3p0-config>


I:c3p0连接池的建立代码如下:

public class C3P0Util {
    //创建连接池对象
    private static ComboPooledDataSource dataSource= new ComboPooledDataSource();

    public static ComboPooledDataSource getDataSource() {
        return dataSource;
    }//得到连接池的对象

    public static Connection getConnection() throws SQLException
    {
        return dataSource.getConnection();
    }

    public static void release(Connection conn,PreparedStatement ps,ResultSet rs)
    {
         if(conn!=null)
            try {
                conn.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        if(ps!=null)
            try {
                ps.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
       if(rs!=null)
        try {
            rs.close();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

}


    //调用connection时可以直接调用C3P0中的方法,代码如下
   
public class TestDemo {

    public static void main(String[] args) {

        Connection conn=null;
        PreparedStatement ps=null;

        try {
            conn=C3P0Util.getConnection();//得到connection对象
            String sql="";
            ps=conn.prepareStatement(sql);

            ps.setString(1, "");
            //....
            ps.executeUpdate();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
}


0 0
原创粉丝点击