数据库连接池之dbcp
文章目录
一、使用步骤:
1、引入相关jar包
1)JAVA通过jdbc访问mySQL数据库时需要导入的包:
mysql-connector-java-5.1.37-bin.jar
2)使用数据库连接池技术必定要导入的包:
commons-pool.jar
3)使用dbcp连接池时要使用的包:
commons-dbcp-1.2.2.jar
2、引入properties文件
#数据库连接地址
#url=jdbc:mysql://localhost:3306/数据库名(?配置参数)
url=jdbc:mysql://localhost:3306/express_manage?useUnicode=true&characterEncoding=utf-8
#数据库驱动类的全名
driverClassName=com.mysql.jdbc.Driver
#数据库帐号
username=root
#数据库密码 等于号后面直接填密码,不需要引号,密码为空时可以不填或 ""
password=
#初始化连接池时,创建的连接数量
initialSize=5
#连接池的最大连接容量,连接使用完后不释放会很容易达到最大值,导致之后的连接被卡住
maxActive=20
#空闲时允许保留的最大连接数量
maxIdle=5
#空闲时允许保留的最小连接数量
minIdle=5
#排队等候的超时时间(毫秒)
maxWait=3000
3、将配置文件, 转换为Properties对象
//文件的输入流
InputStream is = DBCPTest.class.getClassLoader().getResourceAsStream("dbcp.properties");
//将配置文件, 转换为Properties对象
Properties ppt = new Properties();
ppt.load(is);
//通过连接池的工厂类(DruidDataSourceFactory)的创建连接池的方法(createDataSource())
DataSource ds = BasicDataSourceFactory.createDataSource(ppt);
4、通过连接池的工厂类(BasicDataSourceFactory)的创建连接池的方法(createDataSource())
//通过连接池的工厂类(DruidDataSourceFactory)的创建连接池的方法(createDataSource())
DataSource ds = BasicDataSourceFactory.createDataSource(ppt);
5、从连接池中 获取连接对象
//从连接池中 获取连接对象
Connection conn = ds.getConnection();
6、使用连接对数据库进行操作
//通过连接对象,创建SQL对象
Statement state = conn.createStatement();
//通过SQL对象,执行SQL语句
//这里是为数据库增加一行数据
state.execute("insert into user value ('huang','123')");
7、释放资源
//释放资源
conn.close();
state.close();
8、全部代码
import org.apache.commons.dbcp.BasicDataSourceFactory;
import javax.sql.DataSource;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.Statement;
import java.util.Properties;
public class DBCPTest {
//全局变量
private static DataSource ds = null;
static {
Properties ppt = new Properties();
InputStream is = DBCPTest.class.getClassLoader().getResourceAsStream("dbcp.properties");
try {
ppt.load(is);
ds = BasicDataSourceFactory.createDataSource(ppt);
} catch (Exception e) {
e.printStackTrace();
}
}
public static void main(String[] args) throws Exception {
//文件的输入流
InputStream is = DBCPTest.class.getClassLoader().getResourceAsStream("dbcp.properties");
//将配置文件, 转换为Properties对象
Properties ppt = new Properties();
ppt.load(is);
//通过连接池的工厂类(DruidDataSourceFactory)的创建连接池的方法(createDataSource())
DataSource ds = BasicDataSourceFactory.createDataSource(ppt);
//从连接池中 获取连接对象
Connection conn = ds.getConnection();
//通过连接对象,创建SQL对象
Statement state = conn.createStatement();
//通过SQL对象,执行SQL语句,以
state.execute("insert into user value ('huang','123')");
//释放资源
conn.close();
state.close();
}
}
9、结果
初始数据库:
运行成功:
数据库中的内容改变:
二、改进
在实际应用中,我们会频繁的对数据库操作,而这些操作中有这很大的共同操作,所以我们可以把这些共同操作给提取出来。这个类我们称它为工具类
1、改进代码,使用DBCP工具类
//放在静态代码块中的全局变量
import org.apache.commons.dbcp.BasicDataSourceFactory;
import javax.sql.DataSource;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;
public class DBCPTest {
//全局变量
private static DataSource ds = null;
static {
Properties ppt = new Properties();
InputStream is = DBCPTest.class.getClassLoader().getResourceAsStream("dbcp.properties");
try {
ppt.load(is);
ds = BasicDataSourceFactory.createDataSource(ppt);
} catch (Exception e) {
e.printStackTrace();
}
}
//获取连接对象
public static Connection getConnection(){
try {
return ds.getConnection();
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
//释放资源
public static void close(Connection conn, Statement state, ResultSet result) {
if(result != null) {
try {
result.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if(state != null) {
try {
state.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if(conn != null) {
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
public static void main(String[] args) throws Exception {
Connection conn = DBCPTest.getConnection();
Statement state = conn.createStatement();
//通过SQL对象,执行SQL语句,以
state.execute("insert into user value ('huang','123')");
DBCPTest.close(conn,state,null);
}
}
2、结果
初始数据库:
运行成功:
数据库中的内容改变: