2010-10-14 2 views
0

Je voudrais savoirest Stmt.close() nécessaire dans mon programme

1.Le but de la déclaration de clôture en java

2.Quel se produira si je ne donne stmt.close() dans mon programme

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(); 
} 

Ceci est mon exemple de code ici j'ai raté DelPPro.close() catch (SQLException e) { e.printStackTrace(); }

Répondre

1

libère cette base de données objet Statement et les ressources JDBC immédiatement au lieu d'attendre que cela se produise quand il est fermé automatiquement. Il est généralement recommandé de libérer des ressources dès que vous en avez fini avec elles pour éviter d'avoir à lier les ressources de la base de données. L'appel de la méthode close sur un objet Statement déjà fermé n'a aucun effet.

Remarque: Un objet Statement est automatiquement fermé lorsqu'il est collecté. Lorsqu'un objet Statement est fermé, son objet ResultSet actuel, s'il existe, est également fermé.

Document

+0

Si je ferme le resultset alors l'objet stmt sera également fermé? – Mohan

+0

@Mohan Non. La seule façon de libérer des ressources associées à l'objet instruction est d'appeler close() dessus. – diciu

1

Vous voulez dire java.sql.Statement? Il libère les ressources jdbc et db liées par cette instruction. Si vous ne le faites pas et que vous récupérez les ordures, c'est fait ensuite. Mais je le ferais moi-même car cela pourrait créer une exception que je voudrais gérer moi-même.

0

En supposant que vous parlez des instructions SQL ...

close() presse cette base de données de l'objet de la Déclaration et des ressources JDBC immédiatement au lieu d'attendre que cela se produise quand il est fermé automatiquement.

Taken de Oracle

1

Alors que vous pouvez parfois sortir avec des déclarations qui ne ferment pas en appelant close(), vous aurez des ennuis si l'exécution de l'instruction se fait dans une boucle.

L'erreur côté serveur habituelle est dans ce cas "trop ​​de curseurs ouverts". Vous verrez cela dans votre client comme une SQLException.

Questions connexes