欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

DBCP连接池与C3P0连接池的比较

程序员文章站 2024-03-20 08:41:04
...

                          DBCP连接池与C3P0连接池的比较

           如果一个项目中如果需要多个连接,如果一直获取连接,断开连接,这样比较浪费资源,如果创建一个池,用池来管理Connection,这样就可以重复使用Connection。有了池我们就不用自己来创建Connection,而是通过池来获取Connection对象。当使用完Connection后,调用Connection的close()方法也不会真的关闭Connection,而是把Connection“归还”给池。池就可以再利用这个Connection对象了。这里我们常用的连接池有两种,分别是:DBCP连接池和C3P0连接池,下边是对两种连接池的具体使用和比较。

DBCP连接池:

   使用连接池的第一项工作就是导包,这里需要的两个jar包分别是

DBCP连接池与C3P0连接池的比较

        在使用写连接池工具类的时候,可以通过配置文件来连接数据库,配置文件中记录了连接数据库的驱动、URL、用户名和密码等信息,但要注意这里的文件后缀为:.properties”。把通过配置文件连接数据库的部分写在静态代码块中,随着类的加载只加载一次。出了连接数据库,还要提供一个获得数据源的方法和一个获取连接的方法,下边是把连接池写成一个工具类的代码,写成工具类和直接使用的代码几乎相同,就不在重复的写了。

配置文件的部分内容:

DBCP连接池与C3P0连接池的比较

代码:(配置文件的命名为:dbcp.properties

  1. public class DBCPUtils {  
  2.     //首先定义私有的datasource  
  3.     private static DataSource datasource;  
  4.     //把配置文件部分放在静态代码块中,调用时直接加载  
  5.     static{  
  6.           
  7.         try {  
  8.             //加载文件  
  9.             InputStream is=DBCPUtils.class.getClassLoader().getResourceAsStream(“dbcp.properties”);  
  10.             //实例化properties集合  
  11.             Properties prop=new Properties();     
  12.             prop.load(is);        
  13.             //首先加载核心类      
  14.             datasource=BasicDataSourceFactory.createDataSource(prop);  
  15.         } catch (Exception e) {  
  16.             // TODO Auto-generated catch block  
  17.             e.printStackTrace();  
  18.         }         
  19.           
  20.     }  
  21.     //提供获得数据源    
  22.     public static DataSource getDataSource(){  
  23.         return datasource;  
  24.     }  
  25.     //提供获得连接       
  26.     public static Connection getConnection() throws SQLException{  
  27.         return datasource.getConnection();  
  28.     }  
  29. }  
public class DBCPUtils {
    //首先定义私有的datasource
    private static DataSource datasource;
    //把配置文件部分放在静态代码块中,调用时直接加载
    static{

        try {
            //加载文件
            InputStream is=DBCPUtils.class.getClassLoader().getResourceAsStream("dbcp.properties");
            //实例化properties集合
            Properties prop=new Properties();   
            prop.load(is);      
            //首先加载核心类    
            datasource=BasicDataSourceFactory.createDataSource(prop);
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }       

    }
    //提供获得数据源  
    public static DataSource getDataSource(){
        return datasource;
    }
    //提供获得连接     
    public static Connection getConnection() throws SQLException{
        return datasource.getConnection();
    }
}

C3P0连接池:

  同样的第一步工作是导包:

DBCP连接池与C3P0连接池的比较

 这种连接池在进行数据库的连接的时候有两种连接方法:使用配置文件和不使用配置文件两种。当然使用配置文件的时候代码要简介的多,配置文件中同样是记录了连接数据库的驱动、URL、用户名和密码等信息。

      不使用配置文件的代码:三个步骤:1、导入核心类:ComboPooledDataSource 2、基本的四项设置,也就是设置驱动,URL,用户名和密码等四项。3、其他四项。代码如下:  

  1. public class c3p0_test01 {  
  2.     public static void main(String[] args) throws Exception {  
  3.         //导入一个核心类  
  4.         ComboPooledDataSource  dataSource = new ComboPooledDataSource();  
  5.         //基本四项设置  
  6.         dataSource.setDriverClass(”com.mysql.jdbc.Driver”);  
  7.         dataSource.setJdbcUrl(”jdbc:mysql://localhost:3306/eeday09”);  
  8.         dataSource.setUser(”root”);  
  9.         dataSource.setPassword(”123”);  
  10.         //其他四项设置  
  11.         dataSource.setInitialPoolSize(10);  //初始化连接个数  
  12.         dataSource.setMaxPoolSize(40);   //最大链接数  
  13.         dataSource.setMinPoolSize(5);  //设置最小链接数  
  14.         dataSource.setAcquireIncrement(2);    //设置每次增加的连接数  
  15.         Connection conn=dataSource.getConnection();      //进行数据库连接  
  16.         System.out.println(conn);  
  17.     }  
  18. }  
public class c3p0_test01 {
    public static void main(String[] args) throws Exception {
        //导入一个核心类
        ComboPooledDataSource  dataSource = new ComboPooledDataSource();
        //基本四项设置
        dataSource.setDriverClass("com.mysql.jdbc.Driver");
        dataSource.setJdbcUrl("jdbc:mysql://localhost:3306/eeday09");
        dataSource.setUser("root");
        dataSource.setPassword("123");
        //其他四项设置
        dataSource.setInitialPoolSize(10);  //初始化连接个数
        dataSource.setMaxPoolSize(40);   //最大链接数
        dataSource.setMinPoolSize(5);  //设置最小链接数
        dataSource.setAcquireIncrement(2);    //设置每次增加的连接数
        Connection conn=dataSource.getConnection();      //进行数据库连接
        System.out.println(conn);
    }
}
如果使用配置文件连接数据库,其中配置文件中的内容为:

DBCP连接池与C3P0连接池的比较

使用配置文件进行连接的写法如下:

  1. import java.sql.Connection;  
  2. import java.sql.SQLException;  
  3. import javax.sql.DataSource;  
  4. import org.apache.commons.dbutils.QueryRunner;  
  5. import com.mchange.v2.c3p0.ComboPooledDataSource;  
  6.   
  7. public class C3P0Utils {  
  8.     //1、提供私有化的数据源    使用默认设置  
  9.     private static ComboPooledDataSource datasource=new ComboPooledDataSource();  
  10.     //使用命名配置  
  11.     //private static ComboPooledDataSource datasource =new ComboPooledDataSource(“itheima”);  
  12.     //2.提供对外的数据源  
  13.      public static DataSource getDataSource(){  
  14.         return datasource;    
  15.     }  
  16.     //3.提供对外的链接    
  17.     public static Connection getConnection() throws SQLException{  
  18.         return datasource.getConnection();  
  19.     }  
  20. }  
import java.sql.Connection;
import java.sql.SQLException;
import javax.sql.DataSource;
import org.apache.commons.dbutils.QueryRunner;
import com.mchange.v2.c3p0.ComboPooledDataSource;

public class C3P0Utils {
    //1、提供私有化的数据源    使用默认设置
    private static ComboPooledDataSource datasource=new ComboPooledDataSource();
    //使用命名配置
    //private static ComboPooledDataSource datasource =new ComboPooledDataSource("itheima");
    //2.提供对外的数据源
     public static DataSource getDataSource(){
        return datasource;  
    }
    //3.提供对外的链接  
    public static Connection getConnection() throws SQLException{
        return datasource.getConnection();
    }
}
对比:

 从上边的这两个连接池的代码无论是使用DBCP还是使用C3P0连接池,在写成工具类后都要对外提供一个数据源DateSource和一个连接Connection。作用是,如果我们在进行数据库操作的时候要是使用DBUtils类的时候,就要使用QueryRunner核心类,而这个类在进行与数据库连接的时候只要一句代码:

     QueryRunner qr=newQueryRunner(数据源);这里的数据源,我们可以通过两个连接池获得:C3P0Utils.getDataSource() ,或者:DBCPUtils.getDataSource()获得。如果不使用DBUtils工具类,我们就可以直接通过C3P0Utils.getConnection()或者  DBCPUtils .getConnection()来直接获得连接。









                </div>

                          DBCP连接池与C3P0连接池的比较

           如果一个项目中如果需要多个连接,如果一直获取连接,断开连接,这样比较浪费资源,如果创建一个池,用池来管理Connection,这样就可以重复使用Connection。有了池我们就不用自己来创建Connection,而是通过池来获取Connection对象。当使用完Connection后,调用Connection的close()方法也不会真的关闭Connection,而是把Connection“归还”给池。池就可以再利用这个Connection对象了。这里我们常用的连接池有两种,分别是:DBCP连接池和C3P0连接池,下边是对两种连接池的具体使用和比较。

DBCP连接池:

   使用连接池的第一项工作就是导包,这里需要的两个jar包分别是

DBCP连接池与C3P0连接池的比较

        在使用写连接池工具类的时候,可以通过配置文件来连接数据库,配置文件中记录了连接数据库的驱动、URL、用户名和密码等信息,但要注意这里的文件后缀为:.properties”。把通过配置文件连接数据库的部分写在静态代码块中,随着类的加载只加载一次。出了连接数据库,还要提供一个获得数据源的方法和一个获取连接的方法,下边是把连接池写成一个工具类的代码,写成工具类和直接使用的代码几乎相同,就不在重复的写了。

配置文件的部分内容:

DBCP连接池与C3P0连接池的比较

代码:(配置文件的命名为:dbcp.properties

  1. public class DBCPUtils {  
  2.     //首先定义私有的datasource  
  3.     private static DataSource datasource;  
  4.     //把配置文件部分放在静态代码块中,调用时直接加载  
  5.     static{  
  6.           
  7.         try {  
  8.             //加载文件  
  9.             InputStream is=DBCPUtils.class.getClassLoader().getResourceAsStream(“dbcp.properties”);  
  10.             //实例化properties集合  
  11.             Properties prop=new Properties();     
  12.             prop.load(is);        
  13.             //首先加载核心类      
  14.             datasource=BasicDataSourceFactory.createDataSource(prop);  
  15.         } catch (Exception e) {  
  16.             // TODO Auto-generated catch block  
  17.             e.printStackTrace();  
  18.         }         
  19.           
  20.     }  
  21.     //提供获得数据源    
  22.     public static DataSource getDataSource(){  
  23.         return datasource;  
  24.     }  
  25.     //提供获得连接       
  26.     public static Connection getConnection() throws SQLException{  
  27.         return datasource.getConnection();  
  28.     }  
  29. }  
public class DBCPUtils {
    //首先定义私有的datasource
    private static DataSource datasource;
    //把配置文件部分放在静态代码块中,调用时直接加载
    static{

        try {
            //加载文件
            InputStream is=DBCPUtils.class.getClassLoader().getResourceAsStream("dbcp.properties");
            //实例化properties集合
            Properties prop=new Properties();   
            prop.load(is);      
            //首先加载核心类    
            datasource=BasicDataSourceFactory.createDataSource(prop);
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }       

    }
    //提供获得数据源  
    public static DataSource getDataSource(){
        return datasource;
    }
    //提供获得连接     
    public static Connection getConnection() throws SQLException{
        return datasource.getConnection();
    }
}

C3P0连接池:

  同样的第一步工作是导包:

DBCP连接池与C3P0连接池的比较

 这种连接池在进行数据库的连接的时候有两种连接方法:使用配置文件和不使用配置文件两种。当然使用配置文件的时候代码要简介的多,配置文件中同样是记录了连接数据库的驱动、URL、用户名和密码等信息。

      不使用配置文件的代码:三个步骤:1、导入核心类:ComboPooledDataSource 2、基本的四项设置,也就是设置驱动,URL,用户名和密码等四项。3、其他四项。代码如下:  

  1. public class c3p0_test01 {  
  2.     public static void main(String[] args) throws Exception {  
  3.         //导入一个核心类  
  4.         ComboPooledDataSource  dataSource = new ComboPooledDataSource();  
  5.         //基本四项设置  
  6.         dataSource.setDriverClass(”com.mysql.jdbc.Driver”);  
  7.         dataSource.setJdbcUrl(”jdbc:mysql://localhost:3306/eeday09”);  
  8.         dataSource.setUser(”root”);  
  9.         dataSource.setPassword(”123”);  
  10.         //其他四项设置  
  11.         dataSource.setInitialPoolSize(10);  //初始化连接个数  
  12.         dataSource.setMaxPoolSize(40);   //最大链接数  
  13.         dataSource.setMinPoolSize(5);  //设置最小链接数  
  14.         dataSource.setAcquireIncrement(2);    //设置每次增加的连接数  
  15.         Connection conn=dataSource.getConnection();      //进行数据库连接  
  16.         System.out.println(conn);  
  17.     }  
  18. }  
public class c3p0_test01 {
    public static void main(String[] args) throws Exception {
        //导入一个核心类
        ComboPooledDataSource  dataSource = new ComboPooledDataSource();
        //基本四项设置
        dataSource.setDriverClass("com.mysql.jdbc.Driver");
        dataSource.setJdbcUrl("jdbc:mysql://localhost:3306/eeday09");
        dataSource.setUser("root");
        dataSource.setPassword("123");
        //其他四项设置
        dataSource.setInitialPoolSize(10);  //初始化连接个数
        dataSource.setMaxPoolSize(40);   //最大链接数
        dataSource.setMinPoolSize(5);  //设置最小链接数
        dataSource.setAcquireIncrement(2);    //设置每次增加的连接数
        Connection conn=dataSource.getConnection();      //进行数据库连接
        System.out.println(conn);
    }
}
如果使用配置文件连接数据库,其中配置文件中的内容为:

DBCP连接池与C3P0连接池的比较

使用配置文件进行连接的写法如下:

  1. import java.sql.Connection;  
  2. import java.sql.SQLException;  
  3. import javax.sql.DataSource;  
  4. import org.apache.commons.dbutils.QueryRunner;  
  5. import com.mchange.v2.c3p0.ComboPooledDataSource;  
  6.   
  7. public class C3P0Utils {  
  8.     //1、提供私有化的数据源    使用默认设置  
  9.     private static ComboPooledDataSource datasource=new ComboPooledDataSource();  
  10.     //使用命名配置  
  11.     //private static ComboPooledDataSource datasource =new ComboPooledDataSource(“itheima”);  
  12.     //2.提供对外的数据源  
  13.      public static DataSource getDataSource(){  
  14.         return datasource;    
  15.     }  
  16.     //3.提供对外的链接    
  17.     public static Connection getConnection() throws SQLException{  
  18.         return datasource.getConnection();  
  19.     }  
  20. }  
import java.sql.Connection;
import java.sql.SQLException;
import javax.sql.DataSource;
import org.apache.commons.dbutils.QueryRunner;
import com.mchange.v2.c3p0.ComboPooledDataSource;

public class C3P0Utils {
    //1、提供私有化的数据源    使用默认设置
    private static ComboPooledDataSource datasource=new ComboPooledDataSource();
    //使用命名配置
    //private static ComboPooledDataSource datasource =new ComboPooledDataSource("itheima");
    //2.提供对外的数据源
     public static DataSource getDataSource(){
        return datasource;  
    }
    //3.提供对外的链接  
    public static Connection getConnection() throws SQLException{
        return datasource.getConnection();
    }
}
对比:

 从上边的这两个连接池的代码无论是使用DBCP还是使用C3P0连接池,在写成工具类后都要对外提供一个数据源DateSource和一个连接Connection。作用是,如果我们在进行数据库操作的时候要是使用DBUtils类的时候,就要使用QueryRunner核心类,而这个类在进行与数据库连接的时候只要一句代码:

     QueryRunner qr=newQueryRunner(数据源);这里的数据源,我们可以通过两个连接池获得:C3P0Utils.getDataSource() ,或者:DBCPUtils.getDataSource()获得。如果不使用DBUtils工具类,我们就可以直接通过C3P0Utils.getConnection()或者  DBCPUtils .getConnection()来直接获得连接。









                </div>
相关标签: dbcp c3p0