使用DBCP和CP30来创建数据库连接池的理解(在校大学生,如有不对的请指正)
首先为什么要用这个东西呢?首先在初期的时候我相信许多小伙伴也会像我一样是按照下列方式来连接数据库的(mysql)
// 主要功能就是连接数据库、关闭数据库
public class ConnectionBase
{
private final String DbDriver = "com.mysql.jdbc.Driver";//加载驱动程序,引号里面是驱动程序的地址
private final String URL = "jdbc:mysql://localhost:********";//数据库连接地址
private final String user = "****"; //数据库名称
private final String userPWD = "****"; //数据库密码
private Connection conn = null ;
public ConnectionBase(String URL){
try
{
Class.forName(DbDriver) ;
this.conn = DriverManager.getConnection(URL,user,userPWD) ;
}
catch (Exception e)
{
e.printStackTrace();
}
}
public ConnectionBase()
{
try
{
Class.forName(DbDriver) ;
this.conn = DriverManager.getConnection(URL,user,userPWD) ;
}
catch (Exception e)
{
e.printStackTrace();
}
}
// 取得数据库连接
public Connection getConnection()
{
return this.conn ;
}
// 关闭数据库连接
public void close()
{
try
{
this.conn.close() ;
}
catch (Exception e)
{
}
}
};
这只是一个例子,如果用这种方式在后台每次都需要new出一个Connection的话,每一次访问数库都要频繁的建立连接,关闭连接,无疑是很消耗服务器的资源的,那么就需要造一个连接池,就不多BB了,下面开始:
DBCP创建数据库连接池
使用DBCP创建连接池所需要的jar包有两个:
commons-pool-1.5.6.jar
commons-dbcp-1.4.jar
- 不使用配置文件的方式(一般不用)
public void testDBCP01(){
Connection conn = null;
PreparedStatement ps = null;
try {
//1. 构建数据源对象
BasicDataSource dataSource = new BasicDataSource();
//连的是什么类型的数据库, 访问的是哪个数据库 , 用户名, 密码。。
//jdbc:mysql://localhost/bank 主协议:子协议 ://本地/数据库
//此部分用了大量的set***方法,
dataSource.setDriverClassName("com.mysql.jdbc.Driver");
dataSource.setUrl("jdbc:mysql://localhost:端口/表名");
dataSource.setUsername("root");
dataSource.setPassword("root");
//2. 得到连接对象
conn = dataSource.getConnection();
String sql = "insert into account values(null , ? , ?)";
ps = conn.prepareStatement(sql);
ps.setString(1, "admin");
ps.setInt(2, 1000);
ps.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
}finally {
JDBCUtil.release(conn, ps);
}
}
- 配置文件:dbcpconfig.properties
- 下面是 dbcpconfig.properties这个文件的内容
#连接设置
driverClassName=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/表
username=root
password=root
#
initialSize=10
#最大连接数量
maxActive=50
#
maxIdle=20
#
minIdle=5
#
maxWait=60000
#JDBC驱动建立连接时附带的连接属性属性的格式必须为这样:[属性名=property;]
#注意:“user” 与 “password” 两个属性会被明确地传递,因此这里不需要包含他们。
connectionProperties=useUnicode=true;characterEncoding=gbk
#指定由连接池所创建的连接的自动提交(auto-commit)状态。
defaultAutoCommit=true
#driver default 指定由连接池所创建的连接的事务级别(TransactionIsolation)。
#可用值为下列之一:(详情可见javadoc。)NONE,READ_UNCOMMITTED, READ_COMMITTED, REPEATABLE_READ, SERIALIZABLE
defaultTransactionIsolation=READ_UNCOMMITTED
- 使用配置文件的方式(常用)
Connection conn = null;
PreparedStatement ps = null;
try {
BasicDataSourceFactory factory = new BasicDataSourceFactory();
Properties properties = new Properties();
//利用文件内容创建数据库连接池
InputStream is = new FileInputStream("src//dbcpconfig.properties");
properties.load(is);
DataSource dataSource = factory.createDataSource(properties);
//2. 得到连接对象
conn = dataSource.getConnection();
String sql = "insert into table values(null , ? , ?)";
ps = conn.prepareStatement(sql);
ps.setString(1, "Name");
ps.setInt(2, 100);
ps.executeUpdate();
} catch (Exception e) {
e.printStackTrace();
}finally {
JDBCUtil.release(conn, ps);
}
CP30C创建数据库连接池
下次再说!