900字范文,内容丰富有趣,生活中的好帮手!
900字范文 > Java使用dbcp数据库连接池_JAVA使用DBCP2(数据库连接池)

Java使用dbcp数据库连接池_JAVA使用DBCP2(数据库连接池)

时间:2022-09-07 03:45:30

相关推荐

Java使用dbcp数据库连接池_JAVA使用DBCP2(数据库连接池)

一.准备工作

需要下载commons-dbcp2-2.4.0.jar 和 commons-pool2-2.5.0.jar

二.DBCP2数据库连接池工具类

不使用配置文件,直接通过代码设置数据源参数

import mons.dbcp2.BasicDataSource;

import java.sql.Connection;

import java.sql.ResultSet;

import java.sql.SQLException;

import java.sql.Statement;

public class SqlPoolUtil {

private static BasicDataSource dataSource = new BasicDataSource();

//配置数据源

static

{

DataSourceConfig();

}

//以代码形式,设置数据源各属性值

private static void DataSourceConfig(){

dataSource.setDriverClassName("com.mysql.jdbc.Driver");

dataSource.setUsername("root");

dataSource.setPassword("******");

dataSource.setUrl("jdbc:mysql://127.0.0.1:3306/数据库名?useUnicode=true&characterEncoding=utf-8&useSSL=false");

dataSource.setInitialSize(20);

dataSource.setMaxTotal(80);

dataSource.setMaxIdle(40);

dataSource.setMinIdle(20);

dataSource.setMaxWaitMillis(6000);

}

//获得连接对象

public static Connection getConn(){

Connection conn = null;

try{

conn = dataSource.getConnection();

}catch (SQLException e){

e.printStackTrace();

}

return conn;

}

public static void release(Connection conn, Statement st, ResultSet rs){

if (rs!=null){

try {

//关闭存储查询结果的ResultSet对象

rs.close();

}catch (Exception e){

e.printStackTrace();

}

rs = null;

}

if (st!=null){

try {

st.close();

}catch (Exception e){

e.printStackTrace();

}

}

if (conn!=null){

try {

//将Connection连接对象还给数据库连接池

conn.close();

}catch (Exception e){

e.printStackTrace();

}

}

}

}

三.DBCP使用配置文件设置数据源参数

需要下载Commons-dbcp.jar和Commons-pool.jar

1.配置文件dbcpconfig.properties

driverClassName=com.mysql.jdbc.Driver

url=jdbc:mysql://localhost:3306/Dandelion?useUnicode=true&characterEncoding=utf-8&useSSL=false&useServerPrepStmts=true&cachePrepStmts=true

username=root

password=******

initialSize=10

maxActive=50

maxIdle=20

minIdle=5

maxWait=30000

connectionProperties=useUnicode=true;characterEncoding=UTF8

defaultAutoCommit=true

defaultTransactionIsolation=READ_UNCOMMITTED

2.读取数据源配置的JAVA代码

import mons.dbcp.BasicDataSource;

import mons.dbcp.BasicDataSourceFactory;

import javax.sql.DataSource;

import java.io.InputStream;

import java.sql.*;

import java.util.Properties;

/**

* @ClassName:JdbcUtil

* @Description:数据库连接工具类

*/

public class JdbcUtil {

//数据库连接池需实现javax.sql.DataSource接口,DBCP连接池是javax.sql.DataSource接口的具体实现

private static DataSource ds = new BasicDataSource();

//使用静态代码块创建数据库连接池

static{

try{

//加载dbcpconfig.properties配置文件

InputStream in = JdbcUtil.class.getClassLoader().getResourceAsStream("/src/dbcpconfig.properties");

Properties prop = new Properties();

prop.load(in);

log.info(prop.getProperty("password"));

log.info("开始创建数据源");

//创建数据源

ds = BasicDataSourceFactory.createDataSource(prop);

}catch (Exception e){

throw new ExceptionInInitializerError(e);

}

}

/**

* @Method:getConnection

* @Description:从数据源中获取数据库连接

* @return

* @throws SQLException

*/

public static Connection getConnection() throws SQLException{

//从数据源中获取数据库连接

return ds.getConnection();

}

/**

* @Method:release

* @Description:释放资源(数据库连接对象conn,负责执行SQL命令的Statement对象,存储查询结果的ResultSet对象)

* @param conn

* @param st

* @param rs

*/

public static void release(Connection conn, Statement st, ResultSet rs){

if (rs!=null){

try {

//关闭存储查询结果的ResultSet对象

rs.close();

}catch (Exception e){

e.printStackTrace();

}

rs = null;

}

if (st!=null){

try {

st.close();

}catch (Exception e){

e.printStackTrace();

}

}

if (conn!=null){

try {

//将Connection连接对象还给数据库连接池

conn.close();

}catch (Exception e){

e.printStackTrace();

}

}

}

}

四.关于DBCP读取properties文件路径的说明

JAVA的Class.getClassLoader.getResourceAsStream(String path)中的path有带“/"和不带“/"两种写法

第一种:前面有 “ / ”

“ / ”代表了工程的根目录,例如工程名叫做myproject,“ / ”代表了myproject

me.class.getResourceAsStream("/com/x/file/myfile.xml");

第二种:前面没有 “ / ”

代表当前类的目录

me.class.getResourceAsStream("myfile.xml");

me.class.getResourceAsStream("file/myfile.xml");

万丈红尘三杯酒,千秋大业一壶茶

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。