你的位置:首页 > 软件开发 > Java > 三个目前比较常见的连接池的简单运用

三个目前比较常见的连接池的简单运用

发布时间:2017-10-21 11:00:24
三个目前比较常见的连接池的简单运用  c3p0:    目前在市面上c3p0可以说已经占据了连接池的大头,很多的框架都在使用c3p0来作为连接数据库的一个连接池。    那么我们如何使用c3p0来获取连接呢,    c3p0给我们提供了三种方式       1、通过setXX ...

三个目前比较常见的连接池的简单运用

 三个目前比较常见的连接池的简单运用

  c3p0:

    目前在市面上c3p0可以说已经占据了连接池的大头,很多的框架都在使用c3p0来作为连接数据库的一个连接池。

    那么我们如何使用c3p0来获取连接呢,

    c3p0给我们提供了三种方式 

      1、通过setXXX()的方式来设置属性,很简单,但这样的话难免有着硬编码的问题(spring框架可以在spring配置文件中通过依赖注入的方式来设置属性)

      2、通过properties属性文件来进行配置,这种就是直接创建一个c3p0.properties文件并设置相应属性就可以了,c3p0可以进行自动解析(这样在修改连接属性时就需要修改源代码)

      3、通过

      详情可以参 blog.csdn.net/u012506661/article/details/53548083,写得就非常详细

    那么我们接下来就附上第一种方式的代码 ,这是最简单的使用,不需要配置就可以了,同我上一次发的文章一样,我也已经把他封装到一个DBUtil工具类中了,

    步骤1.

      导入jar包   三个目前比较常见的连接池的简单运用

 

    步骤2、实例化一个ComboPooledDataSource对象,并设置属性(我是自己创建一个properties文件进行配置)

    步骤3、调用getConnection()获取连接进行操作 

三个目前比较常见的连接池的简单运用三个目前比较常见的连接池的简单运用
 1 package com.c3p0; 2  3 import java.beans.PropertyVetoException; 4 import java.sql.Connection; 5 import java.sql.DriverManager; 6 import java.sql.PreparedStatement; 7 import java.sql.ResultSet; 8 import java.sql.SQLException; 9 import java.util.ResourceBundle; 10  11 import com.mchange.v2.c3p0.ComboPooledDataSource; 12  13  14 public class DButil { 15  private static ComboPooledDataSource ds = null; 16  ResultSet rs = null; 17  Connection con=null; 18  PreparedStatement stmt=null; 19  static{ 20   ds = new ComboPooledDataSource(); 21   try { 22    ds.setDriverClass("com.mysql.jdbc.Driver"); 23   } catch (PropertyVetoException e) { 24    // TODO Auto-generated catch block 25    e.printStackTrace(); 26   } 27   ResourceBundle rb = ResourceBundle.getBundle("dbcp"); 28   ds.setJdbcUrl(rb.getString("url")); 29   ds.setUser(rb.getString("name")); 30   ds.setPassword(rb.getString("password")); 31   ds.setMaxPoolSize(Integer.parseInt(rb.getString("maxActive")));//设置最大连接数 32   ds.setMaxIdleTime(Integer.parseInt(rb.getString("maxWait")));//设置等待时间 33   ds.setInitialPoolSize(Integer.parseInt(rb.getString("maxIdle")));//设置最大空闲连接数 34  } 35  //用构造方法加载驱动 36  public DButil(){ 37    38  } 39   40  //创建链接符对象 41  public void conManager() 42  { 43   try { 44    con=ds.getConnection(); 45   } catch (SQLException e) { 46    // TODO Auto-generated catch block 47    e.printStackTrace(); 48   } 49  } 50  //创建方法用于关闭数据库 51  public void closeFunction(ResultSet rs){ 52   try{ 53    //如果三个值不为空 就关闭 54    if(rs!=null){ 55     rs.close(); 56    } 57    if(con!=null){ 58     ds.close(); 59    } 60    if(stmt!=null){ 61     stmt.close(); 62    } 63   }catch(Exception e){ 64    e.printStackTrace(); 65   } 66  } 67  /** 68   * 封装工具类的方法(用于增删改) 69   * @param sql 70   * @return 71  */ 72  public int execUpdate(String sql,Object[] o){ 73   int result=0; 74   //创建Conn类型的变量 75   try{ 76    conManager(); 77    //创建数据库操作对象 78     79    stmt=con.prepareStatement(sql); 80    if(o!=null){ 81     for(int i=0;i<o.length;i++){ 82      stmt.setObject(i+1, o[i]); 83     } 84    } 85    //用result保存数据库执行 86    result=stmt.executeUpdate(); 87   }catch(Exception e){ 88    e.printStackTrace(); 89   } 90   finally{ 91    closeFunction(null); 92   } 93    94    95   return result; 96  } 97  /** 98   * 封装工具类用于查询 99  */100  public ResultSet connectionSelect(String sql,Object[] o){101   try{102    //写入驱动103    conManager();104    //创建数据库操作对象105    stmt=con.prepareStatement(sql);106    if(o!=null){107     for(int i=0;i<o.length;i++){108      stmt.setObject(i+1, o[i]);109     }110    }111    //用rs保存数据库执行112    rs=stmt.executeQuery();113    114    115   }catch(Exception e){116    e.printStackTrace();117   }118   return rs;119  }120 }
View Code
package com.c3p0;import java.sql.ResultSet;import org.junit.Test;public class Demo {	@Test	public void run() throws Exception{		DButil db = new DButil();		ResultSet rs = db.connectionSelect("select * from SECURITY",null);		while(rs.next()){			System.out.println(rs.getString(1)+"\t"+rs.getString(2));		}	}}

  

  DBCP的使用

    同样有三步

    1、导入架包三个目前比较常见的连接池的简单运用

    2、实例 化 一个BasicDataSource类,设置属性

    3、获取连接进行操作

       

三个目前比较常见的连接池的简单运用三个目前比较常见的连接池的简单运用
 1 @Test 2  public void demo() throws Exception{ 3   //创建读取文件的资源对象 4   ResourceBundle rb = ResourceBundle.getBundle("dbcp"); 5   //创建基础数据源 6   BasicDataSource bds = new BasicDataSource(); 7   //设置参数 8   bds.setMaxActive(Integer.parseInt(rb.getString("maxActive"))); 9   bds.setMaxIdle(Integer.parseInt(rb.getString("maxIdle")));10   bds.setMaxWait(Integer.parseInt(rb.getString("maxWait")));11   bds.setUsername(rb.getString("name"));12   bds.setPassword(rb.getString("password"));13   bds.setDriverClassName(rb.getString("driverClassName"));14   bds.setUrl(rb.getString("url"));15   16    Connection conn = bds.getConnection();17    PreparedStatement pst = conn.prepareStatement("select * from SECURITY");18    //执行sql19    ResultSet rs = pst.executeQuery();20    //遍历21    while(rs.next()){22     System.out.println(rs.getObject(1)+"\t"+rs.getObject(2));23    } 24   rs.close();25   pst.close();26   conn.close();27  }
View Code

  值得说下的是,druid这款连接池,目前据说是比以往任何一款连接池的性能都要强,也许过不了多久,连接池的市场可能druid要独占鳌头了,所以这个比较重要 

  druid本身也支持三种配置连接属性的方式 ,

  即 set方法设置 、properties文件配置、还有

  步骤如下

    1、导入jar包三个目前比较常见的连接池的简单运用

    2、实例化DruidDataSource,并通过set方法设置属性

    3、获取连接

    4、进行操作,

    5、直接调用连接的close就可以归还连接了

  工具类的代码

三个目前比较常见的连接池的简单运用三个目前比较常见的连接池的简单运用
public class DButil { private static DruidDataSource ds = null; ResultSet rs = null; Connection con=null; PreparedStatement stmt=null; static{  //读取配置文件信息  ResourceBundle rb = ResourceBundle.getBundle("dbcp");  ds = new DruidDataSource();  //设置ds连接池的参数  ds.setDriverClassName(rb.getString("url"));  ds.setUsername(rb.getString("name"));  ds.setPassword(rb.getString("password"));  ds.setUrl(rb.getString("url"));  ds.setInitialSize(Integer.parseInt(rb.getString("maxActive")));  ds.setMinIdle(Integer.parseInt(rb.getString("maxWait")));  ds.setMaxActive(Integer.parseInt(rb.getString("maxIdle")));  } //用构造方法加载驱动 public DButil(){   }  //创建链接符对象 public void conManager() {  try {   con=ds.getConnection();  } catch (SQLException e) {   // TODO Auto-generated catch block   e.printStackTrace();  } } //创建方法用于关闭数据库 public void closeFunction(ResultSet rs){  try{   //如果三个值不为空 就关闭   if(rs!=null){    rs.close();   }   if(con!=null){    con.close();   }   if(stmt!=null){    stmt.close();   }  }catch(Exception e){   e.printStackTrace();  } } /**  * 封装工具类的方法(用于增删改)  * @param sql  * @return  */ public int execUpdate(String sql,Object[] o){  int result=0;  //创建Conn类型的变量  try{   conManager();   //创建数据库操作对象      stmt=con.prepareStatement(sql);   if(o!=null){    for(int i=0;i<o.length;i++){     stmt.setObject(i+1, o[i]);    }   }   //用result保存数据库执行    result=stmt.executeUpdate();  }catch(Exception e){   e.printStackTrace();  }  finally{   closeFunction(null);  }      return result; } /**  * 封装工具类用于查询  */ public ResultSet connectionSelect(String sql,Object[] o){  try{   //写入驱动   conManager();   //创建数据库操作对象   stmt=con.prepareStatement(sql);   if(o!=null){    for(int i=0;i<o.length;i++){     stmt.setObject(i+1, o[i]);    }   }   //用rs保存数据库执行   rs=stmt.executeQuery();        }catch(Exception e){   e.printStackTrace();  }  return rs; }}
View Code

测试的代码

三个目前比较常见的连接池的简单运用三个目前比较常见的连接池的简单运用
@Test public void run() throws Exception{  DButil db = new DButil();  ResultSet rs = db.connectionSelect("select * from user",null);  while(rs.next()){   System.out.println(rs.getString(1)+"\t"+rs.getString(2)+"\t"+rs.getString(3)+"\t");  } }
View Code

  总结一下,如昨天说的一样,这三个连接池都要求要实例化一个实现了DataSource接口的实现类进行操作,同时他们对connection即获取的连接的close方法进行了增强,以达到关闭连接时

    不是关闭与数据库的连接而是归还到连接池中,说得不是很详细,还需要多多学习

     详细可

原标题:三个目前比较常见的连接池的简单运用

关键词:

*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: admin#shaoqun.com (#换成@)。

可能感兴趣文章

我的浏览记录