不太懂从c3p0连接池获得到的连接,什么时候归还给连接池?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | 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); } } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 | 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积分~
来为老师/同学的回答评分吧