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.

Gdzie przychodzi transakcja i wycofanie? Czy to naConnection 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ę.

questionAnswers(7)

yourAnswerToTheQuestion