private void executeSQL(String sql) {
JDBCManager jdbc = null;
try {
jdbc = new JDBCManager("hibernate.cfg.xml");
Connection conn = jdbc.getConnection();
PreparedStatement stat = conn.prepareStatement(sql);
stat.execute();
} catch (SQLException e) {
e.printStackTrace();
LOG.error(e);
} finally {
jdbc.close();
}
}这个方法 现在 没有关闭数据库练级 conn.close();   stat.close();  也没关闭。
关闭好 还是不关闭好?

解决方案 »

  1.   

    关闭好,因为hibernate也是用的数据连接池,本来hibernate用javaBean
    映射数据库 检索数据就不是很快,所以你在用的时候就打开链接,用完了就关闭
    ,以免数据池达到了最高链接数,导致链接失败的可能
      

  2.   

    关闭好,因为hibernate也是用的数据连接池,本来hibernate用javaBean
    映射数据库 检索数据就不是很快,所以你在用的时候就打开链接,用完了就关闭
    ,以免数据池达到了最高链接数,导致链接失败的可能
      

  3.   

    原来的程序里面 是 没有关闭的  
    不过我觉得 stat.close();   这个还是要关闭的 。
    现在 的情况是 如果 stat.close();   这句不调用  处理的数据量大 就会发生死锁,调用这句后不会死锁。
    conn.close();   一直没调用
      

  4.   


    数据库链接池可以做到。服务器 启动的时候它会默认进行几个数据库的连接,用的时候会从池中取空余的连接。
    当所有连接都被使用它就会NEW一个新的连接。
    所以不建议 每次都打开和关闭操作,对数据库来说是一个压力。
      

  5.   

    那这句 jdbc.close(); 的关闭会  导致 conn.close(); 关闭么? 应该是不会的对吧?
      

  6.   

    楼主既然已经配置了数据源,数据源中拿出来的connection其实是被包装过的
    connection,它的close()方法已经被重写,调用它的close()方法,其实是把
    connection放回数据源连接池中
      

  7.   

    我以前写代码 都只显示关闭 练级的。。不过我发现一个用了好久的系统 里面 用这种方法执行SQL 语句的都没关闭 ,
    也觉得奇怪 所以来问问