数据库连接池DBCP使用方式
概念
开源数据源实现,使用这些数据库连接池后,我们在项目开发中就不需要编写连接数据库的代码了。
开源数据源包含DBCP、C3P0、Druid等
DBCP Java使用实例:
说在前面
1.准备jar包
commons-dbcp2-2.1.1.jar、commons-pool2-2.9.0.jar
2.添加dbcp properties配置文件
最关键的是连接设置,将数据库的信息修改为自己的数据库。其余配置可以根据实际情况修改,也可不修改。
注意点:配置文件中参数名不能修改,因为dbcp代码中需要去获取这些参数的配置。
配置文件:mysql-dbcp.properties
#连接设置
driverClassName=com.mysql.cj.jdbc.Driver
url=jdbc:mysql://localhost:3306/cclearn?useSSL=true&characterEncoding=utf8&useUnicode=true&serverTimezone=UTC
username=root
password=tester
#
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
3.编写jdbc工具类
jdbc工具类文件:JdbcUtils.Java
首先附上未使用池化技术的Jdbc工具类:
package .mysql_learn;
import java.io.InputStream;
import java.sql.*;
import java.util.Properties;
public class JdbcUtils {
private static String driver;
private static String url;
private static String username;
private static String password;
static{//写在静态代码块中,类被加载的时候就运行了,只运行一次,优先于各种代码块以及构造函数
try{
Properties properties = new Properties();
InputStream in = JdbcUtils.class.getClassLoader().getResourceAsStream("mysql.properties");
properties.load(in);//加载mysql.properties文件
driver = properties.getProperty("driver");//获取mysql.properties的信息
url = properties.getProperty("url");
username = properties.getProperty("username");
password = properties.getProperty("password");
Class.forName(driver);//加载驱动
} catch (Exception e) {
e.printStackTrace();
}
}
public static Connection getConnection() throws ClassNotFoundException, SQLException {
return DriverManager.getConnection(url,username,password);//返回连接对象
}
public static void closeConnection(Connection connection, PreparedStatement preparedStatement, ResultSet rs) throws SQLException {
//依次释放
if(rs != null){
rs.close();
}
if(preparedStatement != null){
preparedStatement.close();
}
if(connection != null){
connection.close();
}
}
}
以下是使用DBCP的Jdbc工具类,可以看到,加载驱动及获取数据库连接的功能都被BasicDataSourceFactory创建出来的对象下的getConnection()方法实现了。
package .mysql_learn;
import mons.dbcp2.BasicDataSource;
import mons.dbcp2.BasicDataSourceFactory;
import java.io.InputStream;
import java.sql.*;
import java.util.Properties;
public class JdbcUtils {
static BasicDataSource dataSource;
static{
try{
//通过InputStream方式服务properties配置文件
Properties properties = new Properties();
InputStream in = JdbcUtils.class.getClassLoader().getResourceAsStream("mysql-dbcp.properties");
properties.load(in);
dataSource = BasicDataSourceFactory.createDataSource(properties);
} catch (Exception e) {
e.printStackTrace();
}
}
public static Connection getConnection() throws ClassNotFoundException, SQLException {
return dataSource.getConnection();
}
public static void closeConnection(Connection connection, PreparedStatement preparedStatement, ResultSet rs) throws SQLException {
if(rs != null){
rs.close();
}
if(preparedStatement != null){
preparedStatement.close();
}
if(connection != null){
connection.close();
}
}
}
4.编写主要业务代码
可以看到,在业务层面创建和销毁数据库连接的代码不需要有任何改变,因为改动都在JdbcUtils.Java工具类中。
package .mysql_learn;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
public class MysqlOptimization {
public static void main(String[] args) throws SQLException, ClassNotFoundException {
Connection connection = JdbcUtils.getConnection();
PreparedStatement preparedStatement = connection.prepareStatement("select * from users;");
ResultSet rs = preparedStatement.executeQuery();
if(rs.next()){
System.out.println(rs.getObject("user_name"));
}
JdbcUtils.closeConnection(connection,preparedStatement,rs);
}
}
原文:/ruoleecc/p/14318383.html