下面直接通过 Java 代码使用 DBCP 数据库连接池连接到 MySQL 数据并获取一个数据库连接,通过该连接获取当前数据库的时间戳。
JDK版本:1.8
MySQL版本:5.7.*
将下面依赖信息添加到 pom.xml 文件:
<!-- https://mvnrepository.com/artifact/org.apache.commons/commons-dbcp2 -->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-dbcp2</artifactId>
<version>2.9.0</version>
</dependency>
<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
<version>1.2</version>
</dependency>
<!-- 数据库驱动依赖 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.38</version>
</dependency>在项目的 resources 目录下创建 dbcp.properties 属性文件,该属性文件配置了数据库信息,内容如下:
# 基本的设置
driverClassName=com.mysql.jdbc.Driver
#url=jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf8&useSSL=false
# 可以将附加参数通过 connectionProperties 属性指定
url=jdbc:mysql://localhost:3306/test
username=root
password=aaaaaa
# 初始化时连接池中connection数量
initialSize=10
# 最大连接数量
maxActive=50
# 最大的空闲连接数量
maxIdle=20
# 最小的空闲链接数量
minIdle=5
# 最大的等待时间,单位是毫秒
maxWait=60000
# 建立连接时的附加参数,如果指定的编码不一致数据库中会出现乱码
# 注意:多个参数之间使用分号(;)进行分割
connectionProperties=useUnicode=true;characterEncoding=utf8;useSSL=false
# 是否开启自动提交,跟事务的控制有关
defaultAutoCommit=true
# 指定由连接池所创建的连接的事务隔离级别(TransactionIsolation)
defaultTransactionIsolation=REPEATABLE_READ下面代码通过 getResourceAsStream() 方法加载 dbcp.properties 属性文件,然后通过 BasicDataSourceFactory.createDataSource() 方法创建 BasicDataSource 数据源。代码如下:
package com.hxstrive.jdbc_pool.dbcp;
import org.apache.commons.dbcp2.BasicDataSource;
import org.apache.commons.dbcp2.BasicDataSourceFactory;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.Properties;
/**
* DBCP 简单使用,通过属性文件存储数据库信息
*
* @author hxstrive.com
*/
public class DbcpHello {
public static void main(String args[]) throws Exception {
Connection connection = null;
PreparedStatement ps = null;
ResultSet rs = null;
BasicDataSource bs = null;
try {
// 加载属性文件
InputStream in = DbcpHello.class.getClassLoader().getResourceAsStream("dbcp.properties");
Properties pro = new Properties();
pro.load(in);
bs = BasicDataSourceFactory.createDataSource(pro);
// 从连接池获取数据库连接
connection = bs.getConnection();
ps = connection.prepareStatement("select CURRENT_TIMESTAMP() as ct");
rs = ps.executeQuery();
if(rs.next()) {
System.out.println(rs.getTimestamp("ct"));
}
} finally {
// 释放资源
if(null != rs) {
rs.close();
}
if(null != ps) {
ps.close();
}
if(null != connection) {
connection.close();
}
if(null != bs) {
bs.close();
}
}
}
}运行代码,输出如下:
2023-07-06 12:36:50.0