首页 > 代码库 > 数据库连接池

数据库连接池

数据库连接池

作用:使用池来管理连接的生命周期,节省资源,提高性能。
java提供的连接池接口:javax.sql.DataSource,连接池厂商的连接池类需要实现这一接口。

池参数(所有池参数都有默认值)

初始大小:10个

最小空闲连接数:3个

增量:一次创建的最小单位(5个)

最大空闲连接数:12个

最大连接数:20个

最大的等待时间:1000毫秒

 

四大连接参数

连接池也是使用四大连接参数来完成创建连接对象!

 

实现的接口

连接池必须实现:javax.sql.DataSource接口!

 

连接池返回的Connection对象,它的close()方法与众不同!调用它的close()不是关闭,而是把连接归还给池!

---------------------------------------------------------------------------------------------------------------------------------------------------------------------

DBCP

jar:commons-pool.jar、commons-dbcp.jar

BasicDataSource ds = new BasicDataSource();
ds.setUsername("root");
ds.setPassword("123");
ds.setUrl("jdbc:mysql://localhost:3306/mydb1");
ds.setDriverClassName("com.mysql.jdbc.Driver");
   
ds.setMaxActive(20); //最大连接数
ds.setMaxIdle(10); //最大空闲
ds.setInitialSize(10) ;//初始化
ds.setMinIdle(2) ;//最小空闲
ds.setMaxWait(1000) ;//最大等待时间
  
Connection con = ds.getConnection();

------------------------------------------------------------------------------------------------------------------------------------------------------------------------

C3P0

jar:c3p0-0.9.2-pre1.jar、c3p0-oracle-thin-extras-0.9.2-pre1.jar、mchange-commons-0.2.jarComboPooledDataSource ds = new ComboPooledDataSource();ds.setJdbcUrl("jdbc:mysql://localhost:3306/mydb1");ds.setUser("root");ds.setPassword("123");ds.setDriverClass("com.mysql.jdbc.Driver");   ds.setAcquireIncrement(5) ;/*每次增加五*/ds.setInitialPoolSize(20) ;//初始化连接数ds.setMinPoolSize(2) ;//最少连接ds.setMaxPoolSize(50) ;//最多连接  Connection con = ds.getConnection();

------------------------------------------------------------------------------------------------------------------------------------------------------------------------

C3P0配置文件

1. 通过默认配置初始化连接池

 

配置文件要求:

 

文件名称:必须叫c3p0-config.xml

 

文件位置:必须在src下

<default-config>  <property name="xxx">XXX</property></defualt-config>

2. 通过命名配置初始化连接池

<named-config name="orcale-config">  <property name="xxx">XXX</property></named-config>

    /**     * 配置文件的默认配置     * @throws SQLException      */    @Test    public void fun2() throws SQLException{        /**         * 在创建连接池对象时,这个对象就会自动加载配置文件!不用我们来指定         */        ComboPooledDataSource dataSource  = new ComboPooledDataSource();                Connection con = dataSource.getConnection();        System.out.println(con);        con.close();    }        /**     * 使用命名配置信息     * @throws SQLException     */    @Test    public void fun3() throws SQLException{        /**         * 构造器的参数指定命名配置元素的名称!         * <named-config name="oracle-config">          */        ComboPooledDataSource dataSource  = new ComboPooledDataSource("oracle-config");                Connection con = dataSource.getConnection();        System.out.println(con);        con.close();    }}

 

==============================================================================================

Tomcat配置连接池
在server.xml中,或在conf/catalina/localhost/下创建xml文件

<Context>    <Resource name="myc3p0"    type="com.mchange.v2.c3p0.ComboPooledDataSource"   factory="org.apache.naming.factory.BeanFactory"   user="root"    password="123"    classDriver="com.mysql.jdbc.Driver"       jdbcUrl="jdbc:mysql://127.0.0.1/mydb1"   maxPoolSize="20"   minPoolSize ="5"   initialPoolSize="10"   acquireIncrement="2"/></Context>  

--------------------------------------------------------------------------------------------------------------------------------------------------------------------

获取Tomcat资源

Context cxt = new InitialContext(); DataSource ds = (DataSource)cxt.lookup("java:/comp/env/myc3p0");Connection con = ds.getConnection();

 

----------------------------------------------------------------------------------------------------------------------------------------------------------------------------

修改JdbcUtils

public class JdbcUtils { private static DataSource dataSource = new ComboPooledDataSource(); public static DataSource getDataSource() {  return dataSource; } public static Connection getConnection() {  try {   return dataSource.getConnection();  } catch (Exception e) {   throw new RuntimeException(e);  } }}

==============================================================================================

DBUtils

jar:commons-dbutils.jar
核心类:QueryRunner、ResultSetHandler

QueryRunner方法:
* update():DDL、DML
* query():DQL
* batch():批处理

-------------

增、删、改

 

public void fun1() throws SQLException { QueryRunner qr = new QueryRunner(); String sql = "insert into user values(?,?,?)"; qr.update(JdbcUtils.getConnection(), sql, "u1", "zhangSan", "123");}

-------------

DataSource ds = JdbcUtils.getDataSource();QueryRunner qr = new QueryRunner(ds);String sql = "select * from tab_student";// 把结果集转换成BeanStudent stu = qr.query(sql, new BeanHandler<Student>(Student.class));// 把结果集转换成Bean的ListList<Student> list = qr.query(sql, new BeanListHandler<Student>(Student.class));// 把结果集转换成MapMap<String,Object> map = qr.query(sql, new MapHandler());// 把结果集转换成List<Map>List<Map<String,Object>> list = qr.query(sql, new MapListHandler() );// 把结果集转换成一列的ListList<Object> list = qr.query(sql, new ColumnListHandler("name")) ;// 把结果转换成单行单列的值Number number = (Number)qr.query(sql, new ScalarHandler());

 

批处理

 DataSource ds = JdbcUtils.getDataSource(); QueryRunner qr = new QueryRunner(ds); String sql = "insert into tab_student values(?,?,?,?)"; Object[][] params = new Object[10][]; //表示 要插入10行记录 for(int i = 0; i < params.length; i++) {  params[i] = new Object[]{"S_300" + i, "name" + i, 30 + i, i%2==0?"男":"女"}; } qr.batch (sql, params); 

数据库连接池