2010-10-14 20 views
0

我想知道语句是Stmt.close()在我的程序需要

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() 赶上(的SQLException E) { e.printStackTrace(); }

回答

1

发布的该陈述对象的数据库和JDBC资源,而不是等待这一时自动关闭的情况发生。一旦您完成了资源释放资源以避免捆绑数据库资源,通常是一种好的做法。 在已经关闭的Statement对象上调用close方法没有效果。

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

Document

+0

如果我关闭结果集然后stmt对象也将关闭? – Mohan 2010-10-14 06:40:51

+0

@莫汉号。释放与语句对象关联的资源的唯一方法是在其上调用close()。 – diciu 2010-10-14 06:45:20

1

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

0

假设你正在谈论的SQL语句...

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

Oracle

1

虽然有时你可以通过调用close()方法逃脱不关闭的语句,你会如果语句执行一个循环内完成遇到麻烦。

通常的服务器端错误在这种情况下是“太多打开的游标”。 您将在客户端看到这是一个SQLException。

相关问题