Witam wszystkich wiedziałem, że to stare pytanie, ale po prostu ciekawy dzisiaj. Jak wiemy connection.close również zamknie readyStatement (popraw mnie jeśli się mylę). ale co jeśli ja zamknąć połączenie następnie zamknij PreparedStatementPołączenie Jdbc zamknij i przygotuj zamknij
conn.close();
ps.close();
Czy dostanę wyjątek NullPointer?
Ktoś mówił, zależy od twojej szybkości jvm.sometimes ps.close() będzie działał naprzód i zamknie się najpierw zanim conn.close zakończy swoją pracę, więc nie dostaniesz nullpointer.
W celu sprawdzenia, że mam zmodyfikowany kod
conn.close();
Thread.sleep(5000);//I give 5s to conn.close to finish his work. should be enough
ps.close();
Ale nie dostać NullPointer.
Moje pytanie brzmi, co się tutaj stało, gdy najpierw zamknę połączenie, a następnie ps.
dziękuję wszystkim.
Specyfikacja JDBC jasno o tym mówi: zamknięcie połączenia zamyka wszystkie zależne obiekty (przynajmniej z punktu widzenia użytkownika, w przypadku łączenia instrukcja może pozostać otwarta w puli, ale uchwyt użytkownika do tej instrukcji powinien zachowywać się tak, jakby był zamknięty). Zamknięcie już zamkniętego zasobu JDBC (połączenie, instrukcja, zestaw wyników itd.) Nie powinno mieć żadnego efektu (brak błędów itp.). –
Mówiłem o dekorowanym połączeniu, które jest zwracane przez graczy, a bliskie połączenie z tak udekorowanym połączeniem nie zamyka podstawowego połączenia fizycznego. Zgadzamy się na to prawo? Teraz gracze mogą sprawdzić wyciągi/zestawy wyników odpowiadające temu połączeniu i zamknąć je w zamkniętym wywołaniu połączenia, prawda? Mam nadzieję, że cię poprawiłem. – Vikdor