数据库连接池(DBCP)

一、基础概念的讲解
①数据库连接池的作用(dbcp)
频繁的建立、关闭连接,会极大的减低系统的性能,因为对于连接的使用成了系统性能的瓶颈。 
为了解决资源频繁分配、释放所造成的问题的。建立一个数据库连接池,提供一套高效的连接分配、使用策略,最终目标是实现连接的高效、安全的复用。
②数据库连接池的基本属性

DRIVER_CLASS_NAME- JDBC 所用到的数据库驱动的类全名.
MAX_ACTIVE- 连接池在同一时刻内所提供的最大活动连接数。
MAX_IDLE- 连接池在空闲时刻保持的最大连接数.
MAX_WAIT- 当发生异常时数据库等待的最大毫秒数 (当没有可用的连接时).
PASSWORD- 连接数据库的密码.
URL- 连接至驱动的URL.
USERNAME- 数据库用户名. 
INITIAL_SIZE -初始化的连接数
例如:
private static final String DRIVER_CLASS_NAME="com.mysql.jdbc.Driver";//驱动名称
private static final String URL="jdbc:mysql://localhost:3306/users";//数据库连接
private static final String USERNAME="root";//登录用户名
private static final String PASSWORD="******";//登录密码
private static final int MAX_IDLE=3;//最大空余数
private static final int MAX_WAIT=3000;//最大等待时间
private static final int MAX_ACTIVE=5;//最大连接数
private static final int INITIAL_SIZE=10;//初始化的连接数
③所需jar包
commons-dbcp-1.4.jar
commons-dbutils-1.6.jar
commons-pool-1.5.6.jar
mysql-connector-java-5.1.12-bin.jar

ojdbc6.jar

二、代码实现

package com.weixin.test;
import javax.sql.DataSource;
import org.apache.commons.dbcp.BasicDataSource;
//创建数据库连接池 dbcp
public class TestDataSource {
private static final String DRIVER_CLASS_NAME="com.mysql.jdbc.Driver";//驱动名称
private static final String ENCODING="?useUnicode=true&characterEncoding=utf8";
private static final String URL="jdbc:mysql://localhost:3306/users";//数据库连接
private static final String USERNAME="root";//登录用户名
private static final String PASSWORD="54321";//登录密码
private static final int MAX_IDLE=3;//最大空余数
private static final int MAX_WAIT=3000;//最大等待时间
private static final int MAX_ACTIVE=5;//最大连接数
private static final int INITIAL_SIZE=10;//初始化的连接数
private static BasicDataSource ds=new BasicDataSource();
static{
ds.setDriverClassName(DRIVER_CLASS_NAME);
ds.setUrl(URL+ENCODING);
ds.setUsername(USERNAME);
ds.setPassword(PASSWORD);
ds.setMaxIdle(MAX_IDLE);
ds.setMaxWait(MAX_WAIT);
ds.setMaxActive(MAX_ACTIVE);
ds.setInitialSize(INITIAL_SIZE);
}
public static DataSource getDataSource(){
return ds;
}
}
//测试连接池
package com.weixin.test;
import java.sql.SQLException;
import java.util.List;
import java.util.Map;
import javax.sql.DataSource;
import org.junit.Test;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.ArrayHandler;
import org.apache.commons.dbutils.handlers.ArrayListHandler;
import org.apache.commons.dbutils.handlers.BeanListHandler;
import org.apache.commons.dbutils.handlers.ColumnListHandler;
import org.apache.commons.dbutils.handlers.KeyedHandler;
import org.apache.commons.dbutils.handlers.MapHandler;
import org.apache.commons.dbutils.handlers.MapListHandler;
import org.apache.commons.dbutils.handlers.ScalarHandler;
public class TestQuery {
/*@Test
public void testInsert(){
DataSource source = TestDataSource.getDataSource();
Connection  connection=null;
String sql="insert into users (name,password) values('吕珂','123')";
PreparedStatement preparedStatement=null;
int num=0;
try {
connection=source.getConnection();
preparedStatement=connection.prepareStatement(sql);
num=preparedStatement.executeUpdate();
System.out.println(num);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}*/
@Test
public void tes9() throws SQLException{
//ScalarHandler:获取结果集中第一行数据指定列的值,常用来进行单值查询
DataSource source = TestDataSource.getDataSource();
QueryRunner runner = new QueryRunner(source);
String name = runner.query("select name from users where id=1",new ScalarHandler());
System.out.println(name+"===");
}
//KeyedHandler(name):将结果集中的每一行数据都封装到一个Map里(List),再把这些map再存到一个map里,其key为指定的列。
@Test
public void tes8() throws SQLException{
DataSource source = TestDataSource.getDataSource();
QueryRunner runner = new QueryRunner(source);
Map
     
     
      
      > map = runner.query("select * from users where id=1", new KeyedHandler(),500);
System.out.println(map.get("500")+"2020");//没出来结果,未测试出来
}
//ColumnListHandler:将结果集中某一列的数据存放到List中。
@Test
public void tes7() throws SQLException{
DataSource source = TestDataSource.getDataSource();
QueryRunner runner = new QueryRunner(source);
List
      
      list = runner.query("select * from users where id=3", new ColumnListHandler("name"));
System.out.println(list);
}
//MapListHandler:将结果集中的每一行数据都封装到一个Map里,然后再存放到List
@Test
public void tes6() throws SQLException{
DataSource source = TestDataSource.getDataSource();
QueryRunner runner = new QueryRunner(source);
List
        
        
          > list = runner.query("select * from users where id=1", new MapListHandler()); System.out.println(list.get(0).get("name")+"1010"); } //MapHandler:将结果集中的第一行数据封装到一个Map里,key是列名,value就是对应的值。 /** * @throws SQLException */ @Test public void tes5() throws SQLException{ DataSource source = TestDataSource.getDataSource(); QueryRunner runner = new QueryRunner(source); Map 
         
           map = runner.query("select * from users where id=1", new MapHandler()); String nameString=(String)map.get("name"); int id=(Integer)map.get("id"); System.out.println(nameString+id); } //BeanListHandler:将结果集中的每一行数据都封装到一个对应的JavaBean实例中,存放到List里。 @Test public void tes4() throws SQLException{ DataSource source = TestDataSource.getDataSource(); QueryRunner runner = new QueryRunner(source); List 
          
            list = runner.query("select * from users where id=1", new BeanListHandler(User.class)); System.out.println(list+"++++"); } //ArrayListHandler:把结果集中的每一行数据都转成一个对象数组,再存放到List中。 @Test public void tes2() throws SQLException{ DataSource source = TestDataSource.getDataSource(); QueryRunner runner = new QueryRunner(source); List 
           
             list = runner.query("select * from users where id=1", new ArrayListHandler()); for (Object[] obj : list) { for (Object object : obj) { System.out.print(object); } System.out.println(); } } //ArrayHandler:把结果集中的第一行数据转成对象数组。 @Test public void test1() throws SQLException{ DataSource source = TestDataSource.getDataSource(); QueryRunner runner = new QueryRunner(source); Object[] objs = runner.query("select * from users where id=1", new ArrayHandler()); for (Object object : objs) { System.out.print(object); } System.out.println(); } public static void main(String[] args) { DataSource source = TestDataSource.getDataSource(); QueryRunner query = new QueryRunner(source); try { List 
            
              list = query.query("select * from users", new ArrayListHandler()); for (Object[] obj : list) { for (Object object : obj) { System.out.print(object); } System.out.println(); } } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } 
             

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值