2010-04-25 8 views

risposta

11

Vuol la chiusura di un java.sql.Connection anche chiudere tutte le dichiarazioni, istruzioni preparate, ecc ottenuto da questo collegamento? O ci sarà perdita di memoria se chiudo la connessione ma lascia le istruzioni, non chiuse?

È necessario non dipendere da questo.

Le specifiche recita come segue:

Un'applicazione chiama il metodo Statement.close per indicare che ha terminato l'elaborazione di una dichiarazione. Tutti gli oggetti Statement verranno chiusi quando la connessione che li ha creati è chiusa. Tuttavia, è buona pratica codifica per le applicazioni per chiudere le dichiarazioni non appena hanno terminato l'elaborazione . Ciò consente a di utilizzare tutte le risorse esterne utilizzate per rilasciare immediatamente .

La procedura consigliata consiste nel chiudere TUTTI i ResultSet, le istruzioni e le Connessioni in un blocco finale, ciascuno racchiuso nel proprio try/catch, nell'ordine inverso di acquisizione.

Scrivi una classe come questa:

public class DatabaseUtils 
{ 
    public static void close(Statement s) 
    { 
     try 
     { 
      if (s != null) 
      { 
       s.close(); 
      } 
     } 
     catch (SQLException e) 
     { 
      // log or report in someway 
      e.printStackTrace(); 
     } 
    } 

    // similar for ResultSet and Connection 
} 

chiamata in questo modo:

Statement s; 
try 
{ 
    // JDBC stuff here 
} 
finally 
{ 
    DatabaseUtils.close(s); 
} 
+0

@duffymo: C'è un documento ufficiale disponibile dove posso trovare maggiori informazioni su questo? – Behrang

+0

Forse la specifica JDBC, ma se il fornitore che implementa la tua decide di non seguire la raccomandazione avrai problemi. Che importanza hanno i documenti ufficiali in quel caso? Solo curioso: perché questa risposta non è abbastanza autoritaria per te? – duffymo

+0

Bene, ecco cosa dice la specifica: 13.1.4 Chiusura degli oggetti di istruzione --- Un'applicazione chiama il metodo Statement.close per indicare che ha terminato l'elaborazione di un'istruzione. Tutti gli oggetti Statement verranno chiusi quando la connessione che li ha creati viene chiusa. Tuttavia, è buona pratica di codifica per le applicazioni chiudere le dichiarazioni non appena hanno finito di elaborarle. Ciò consente a qualsiasi risorsa esterna utilizzata dall'istruzione di essere rilasciata immediatamente. – Behrang

Problemi correlati