2012-09-04 18 views
5

Herkese selam, bunun eski bir soru olduğunu biliyordum ama bugün merak ediyorum. Connection.close'u da bildiğimiz gibi readyStatement'i de kapatmış olacağım (eğer yanılıyorsam düzeltin). ancak bağlantıyı kapatırsam daha sonra hazırlamamayansamamaya hazırlanırm?Jdbc bağlantısı kapat ve hazırla kapat kapat

Birisi, jvm speed.sometimes ps.close() öğesine bağlı olduğunu söylüyordu ve conn.close işini bitirmeden önce önce kapanacak ve böylece nullpointer almayacaksınız. Bu test etmek için

, kodu

conn.close(); 
Thread.sleep(5000);//I give 5s to conn.close to finish his work. should be enough 
ps.close(); 

değiştirdiniz Ama nullpointer alamadım.

Bu yüzden sorum ilk önce ve sonra ps'yi kapatırsam ne oldu?

Herkese teşekkürler.

cevap

4

javadoc Statement.close() için devletler:

zaten kapalı olan etkisi yoktur bir Statement nesne üzerinde yöntem close çağrılıyor. Ben öneririm

o bir uygulama ifadelerinizin zaten Connection.close() çağrısıyla kapatıldı eğer hiçbir istisna atmak gerektiğini ifade eder. Eğer zaten kapalı Bildirimi kapatırsanız

0

Bu davranış, sürücü uygulamasına veya bağlantı havuzu uygulayıcısı uygulamasına özeldir. Temel olarak temeldeki bağlantıyı/deyimi/sonuçları bir araya getirirler ve durumlarını takip ederler. Dolayısıyla, uygulama, birincil nesneleri kapatmadan önce bağımlı nesneleri kapatmayı seçebilir. Primrose bağlantı havuzu, (havuza bağlantıyı geri döndürmek üzere geçersiz kılınan) close() yöntemi çağrıldığında, kapatılmamış ifadeler veya sonuçlarla ilgili uyarı yazdırmak için kullanılır.

+0

JDBC belirtimi bu konuda oldukça nettir: bir bağlantıyı kapatmak tüm bağımlı nesneleri kapatır (en azından kullanıcı perspektifinden; havuzun kullanılması durumunda ifadesi havuzun içinde açık kalabilir, ancak bu ifadenin kullanıcı tanıtıcısı kapalıymış gibi davranın). Zaten kapalı bir JDBC kaynağının kapatılması (bağlantı, ifade, sonuç kümesi vb.) Hiçbir etkisi olmamalıdır (hata, vb.). –

+0

Bahçıvanlar tarafından geri getirilen dekore edilmiş bağlantıdan bahsediyordum ve bu şekilde dekore edilmiş bir bağlantıdaki yakın bir çağrı temeldeki fiziksel bağlantıyı kapatmıyor. Buna katılıyor muyuz? Şimdi, havuzcular bu bağlantıya karşılık gelen ifadeleri/sonuç kümelerini kontrol edebilir ve bağlantıdaki yakın çağrıda kapatabilirler, değil mi? Umarım seni hak ettim. – Vikdor

1

Bildirimi Arayüzü javadoc gereğince

close 
void close() 
      throws SQLExceptionReleases this Statement object's database and JDBC resources immediately instead of waiting for this to happen when it is automatically closed. It is generally good practice to release resources as soon as you are finished with them to avoid tying up database resources. 
**Calling the method close on a Statement object that is already closed has no effect.** 

Yani herhangi bir sorun olmayacaktır.