2015-06-12 9 views
5

Stavo leggendo la mia logica di accesso al database e ho scoperto che era possibile chiudere la stessa connessione due volte di seguito.Cosa succede se chiudi una connessione chiusa?

Oltre ad essere un'istruzione duplicata, c'è qualche motivo per cui dovrei preoccuparmi di chiudere una connessione dopo che è già stata chiusa?

+0

No, nessuno, presumendo che il venditore del driver abbia fatto un buon lavoro implementando questo metodo. In caso di utilizzo di un pool di connessione al database, non dovrebbe fare semplicemente nulla. –

+0

Di solito i metodi close dovrebbero gestirlo correttamente se è già chiuso. Ma dipende davvero da cosa stai effettivamente usando. È ipotizzabile che alcune implementazioni abbiano un comportamento strano sebbene altamente improbabile –

risposta

4

Se si utilizza java.sql.Connection non si dovrebbe avere alcun problema.

Dal Connection documentation:

Chiamando il metodo Close su un oggetto Connection che è già chiuso è un no-op.

cioè non fa nulla.

Questo dovrebbe rappresentare una corretta implementazione. Sebbene sia pensabile che alcune implementazioni abbiano comportamenti strani su questo argomento.

+0

* Questo dovrebbe rappresentare un'implementazione corretta * ma potrebbe non essere il caso ... –

+0

@LuiggiMendoza true. Chiarito –

1

Dalla documentazione: banca dati

Uscite questo dell'oggetto Connection e le risorse JDBC subito invece di aspettare che vengano rilasciati automaticamente. Chiamare il metodo close su un oggetto Connection già chiuso è un no-op. Si raccomanda vivamente che un'applicazione esplicitamente impegna o ripristina una transazione attiva prima di chiamare il metodo di chiusura . Se viene chiamato il metodo close e c'è una transazione attiva , i risultati sono definiti dall'implementazione.

Quindi, in breve, non dovrebbe fare nulla. Si noti tuttavia che un'implementazione sciatta per questa interfaccia Connection potrebbe non riuscire a soddisfare le regole definite nel contratto di questa interfaccia. Non hai detto quale database stai usando, quindi non posso fornire ulteriori informazioni sui dettagli di implementazione.