一、基础概念的讲解
①数据库连接池的作用(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
①数据库连接池的作用(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