简介:
接着上一篇eclipse下C3P0连接池的配置
测试环境:Apache Commons DBCP 2.6.0 for JDBC 4.2 on Java 8
导入包密码 (md加密):
[ 7C0E51A59AFA49ECC0D5CA083E85B5A8 ]
o( ̄▽ ̄)o皮是我快乐
使用
1.通过硬编码初始化DBCP
新建
package demo;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import org.apache.commons.dbcp2.BasicDataSource;
public class Dbcp {
//这里用的是BasicDataSource类
public static BasicDataSource dataSource;
//1.初始化DBCP
static {
//第一种方式:使用硬编码直接初始化DBCP
dataSource = new BasicDataSource();
//设置四个基本属性
dataSource.setDriverClassName("com.mysql.jdbc.Driver");
dataSource.setUrl("jdbc:mysql://localhost:3306/java_web??useUnicode=true&useSSL=false");
dataSource.setUsername("root");
dataSource.setPassword("123456");
//初始化连接数量
dataSource.setInitialSize(10);
//最大连接数量
dataSource.setMaxTotal(50);
//最大空闲连接
dataSource.setMaxIdle(20);
//最小空闲连接
dataSource.setMinIdle(5);
//超时等待时间以毫秒为单位 6000毫秒/1000等于60秒
dataSource.setMaxWaitMillis(6000);
}
//2.获取连接
public static Connection getConnection() {
try {
//直接使用DBCP封装的方法来获取链接
return dataSource.getConnection();
} catch (SQLException e) {
e.printStackTrace();
}
return null;
}
//3.关闭连接
public static void closeAll(Connection connection,PreparedStatement pstmt,ResultSet rs) {
try {
if (rs != null) {
rs.close();
}
if (pstmt != null) {
pstmt.close();
}
if (connection != null) {
connection.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
}
}
测试可用否?
新建
package demo;
import java.sql.Connection;
public class TestDbcp {
public static void main(String[] args) {
//超过最大连接限制或报"TimeoutException",每打开一个关闭(不是真的关,是回收)一个就不会发生异常
for (int i = 0; i < 51; i++) {
Connection connection = Dbcp.getConnection();
System.out.println(connection.toString() + "\n------------------------------------");
//这里的closeAll()方法中虽然调用了connection.close(),但是并不会关闭,只是把对象放回连接池中
Dbcp.closeAll(connection, null, null);
}
}
}
查询试试
改变TestDbcp代码
package demo;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
public class TestDbcp {
public static void main(String[] args) {
Connection conn = null;
PreparedStatement pstmt = null;
ResultSet rs = null;
try {
conn = Dbcp.getConnection();
String sql="select username from user_table where password = ?";
pstmt = conn.prepareStatement(sql);
pstmt.setString(1,"123");
rs = pstmt.executeQuery();
while (rs.next()){
System.out.println(rs.getString("username"));
}
} catch (SQLException e) {
e.printStackTrace();
} finally{
Dbcp.closeAll(conn,pstmt,rs);
}
}
}
结果nice
2.通过软编码初始化DBCP
...