2010-10-14 24 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。

相關問題