不太懂从c3p0连接池获得到的连接,什么时候归还给连接池?
public void demo2() {
Connection conn=null;
PreparedStatement pstmt=null;
ResultSet rs=null;
try {
//获得连接
conn= JDBCUtils2.getConnection();
//编写SQL语句
String sql = "SELECT * FROM user";
//预编译SQL
pstmt = conn.prepareStatement(sql);
//设置参数
//执行SQL
rs=pstmt.executeQuery();
while (rs.next()) {
System.out.println(rs.getInt("uid") + " " + rs.getString("username") + " " + rs.getString("password") + " " + rs.getString("name"));
}
} catch (Exception e) {
e.printStackTrace();
}finally {
JDBCUtils2.release(rs,pstmt,conn);
}
}public class JDBCUtils2 {
private static final ComboPooledDataSource dataSource=new ComboPooledDataSource();
//获得连接的方法
public static Connection getConnection() throws Exception {
Connection conn = dataSource.getConnection();
return conn;
}
//资源的释放
public static void release(Statement stmt, Connection conn) {
if (stmt!=null){
try {
stmt.close();
} catch (SQLException e) {
e.printStackTrace();
}
stmt=null;
}
if (conn!=null){
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
conn=null;
}
}
public static void release(ResultSet rs, Statement stmt, Connection conn) {
if (rs!=null){
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
rs=null;
}
if (stmt!=null){
try {
stmt.close();
} catch (SQLException e) {
e.printStackTrace();
}
stmt=null;
}
if (conn!=null){
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
conn=null;
}
}
}在这里,

最后只是执行了释放资源的语句代码呀,也就是close掉了连接

只是释放了资源,close了连接,哪里有归还连接给连接池呢?
3
收起
正在回答
1回答
在c3p0 链接池中,当我们使用close()关闭连接时,只是把该连接放回了连接池中,并没有真正的关闭这个连接呦。这个是它底层的实现。同学这里可以记住呦。
如果我的回答解决了你的疑惑,请采纳!祝学习愉快!
3. Java 数据库开发与实战应用
- 参与学习 人
- 提交作业 357 份
- 解答问题 8016 个
本阶段将带你学习MySQL数据库,JDBC接口,MyBatis框架等,带你掌握的数据的存放和管理。
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星