Podstawowe pojęcia JDBC, Pooling and Threading
Zawsze korzystałem z JDBC w JavaSE w środowisku jednowątkowym. Ale teraz muszę użyć puli połączeń i pozwolić wielu wątkom na interakcję z bazą danych (MSSQL i Oracle) i mam problem z próbą uczynienia tego, ponieważ wydaje mi się, że brakuje mi jakiegoś fundamentalnego niezrozumienia api.
AFAIK po połączeniu i zalogowaniuConnection
reprezentuje fizyczne połączenie TCP / IP z bazą danych. To tworzyStatement
(s), które mogą być postrzegane jako interakcje SQL z bazą danych przezConnection
.
Connection
lubStatement
poziom.Czy to bezpieczne, że „jeden”Connection
stwórz N wypowiedzi i nadaj je różnym wątkom, aby każdy mógł je wykorzystaćStatement
?Jeśli nie, po skonfigurowaniu puli coś takiego:
OracleDataSource ods = new OracleDataSource();
ods.setURL("jdbc:oracle:thin:@tnsentryname");
ods.setUser("u");
ods.setPassword("p");
BTW, gdzie mogę ustawić rozmiar puli połączeń?
Czy to właśnie robiłbym w każdym wątku, aby poprawnie korzystać z połączenia?
// metoda thead run
Connection conn = ods.getConnection();
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery("the sql");
// do what I need to do with rs
rs.close();
int updateStatus = stmt.executeUpdate("the update");
stmt.close();
conn.close();
// koniec metody uruchamiania wątku
Jeśli jakiekolwiek fizyczne połączenie z pulą w jakiś sposób ulegnie awarii lub rozłączy się, czy pula automatycznie spróbuje ponownie połączyć się i wstrzyknąć nowe połączenie w puli, tak aby kolejne pool.getConnection () otrzymało połączenie zdrowotne?Wielkie dzięki i wybaczcie mój zły angielski proszę.