不太懂从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 星