我的程序需要Stmt.close()

时间:2010-10-14 06:22:22

标签: java sql

我想知道

1.在java中关闭语句的目的

2.如果我没有在我的程序中提供stmt.close(),将会发生什么?

try{        
    Statement DelQTY=OPConnect.createStatement();
    Statement DelPMQTY=OPConnect.createStatement();
    Statement DelPReq = OPConnect.createStatement();
    Statement DelPro=OPConnect.createStatement();
    Statement DelPPro=OPConnect.createStatement();
    String DelSql="DELETE FROM ITEM_REQUIRES_MAT WHERE ITEM_NO=6364;
    String DelPM="DELETE FROM PROGRAM_MATERIAL WHERE ITEM_NO=6364;
    String DelPReqPro="DELETE FROM PROGRAM_REQ_PRODUCE_MAT WHERE ITEM_NO=6364;
    String DelProcess="DELETE FROM PROCESS_TRANSFORMS_MAT WHERE ITEM_NO=6364;
    String DelPProcess="DELETE FROM PROGRAM_PROCESS_TRANSFORMS_MAT WHERE ITEM_NO=6364;  
    DelPReq.executeUpdate(DelPReqPro);          
    DelQTY.executeUpdate(DelSql);           
    DelPMQTY.executeUpdate(DelPM);          
    DelPro.executeUpdate(DelProcess);           
    DelPPro.executeUpdate(DelPProcess);
    DelQTY.close();
    DelPMQTY.close();
    DelPReq.close();
    DelPro.close();
    OPConnect.close();
}

这是我的示例代码,我错过了DelPPro.close()     catch(SQLException e)     {     e.printStackTrace();     }

4 个答案:

答案 0 :(得分:1)

你的意思是java.sql.Statement? 它释放由该语句绑定的jdbc和db资源。如果你不这样做并且收集了垃圾,那么就完成了。但我会自己这样做,因为这可能会引发一个我想自己处理的异常。

答案 1 :(得分:1)

  

立即释放此Statement对象的数据库和JDBC资源,而不是等待它自动关闭时发生。通常,最好在完成资源后立即释放资源,以避免占用数据库资源。   在已关闭的Statement对象上调用close方法无效。

     

注意:Statement对象在垃圾回收时会自动关闭。关闭Statement对象时,其当前ResultSet对象(如果存在)也将关闭。

Document

答案 2 :(得分:1)

虽然你有时可以通过调用 close()来避免关闭语句,但如果语句执行是在循环中完成的话,你将遇到麻烦。

通常的服务器端错误在这种情况下是“太多打开游标”。 您将在客户端中将此视为SQLException。

答案 3 :(得分:0)

假设您正在讨论SQL语句......

  

接近()             立即释放此Statement对象的数据库和JDBC资源,而不是等待它自动关闭时发生。

取自Oracle