Zawsze używałem JDBC w JavaSE w środowisku jednowątkowym. Ale teraz potrzebuję użyć puli połączeń i pozwolić wielu wątkom na interakcję z bazą danych (MSSQL i Oracle) i mam trudności z jej próbowaniem, ponieważ wydaje mi się, że brakuje mi fundamentalnego niedostosowania API.Podstawowe pojęcia JDBC, łączenie i gwintowanie
AFAIK po połączeniu i zalogowaniu Connection
reprezentuje fizyczne połączenie tcp/ip z bazą danych. Tworzy Statement
(s), które mogą być postrzegane jako interakcja (e) SQL z bazą danych za pomocą Connection
.
- Skąd bierze się transakcja i wycofanie? Czy to na poziomie
Connection
lubStatement
. - Czy to bezpieczne, że "jeden"
Connection
tworzy N wypowiedzi i nadaje je różnym wątkom, aby każdy mógł korzystać z tegoStatement
?
Jeśli nie, a po skonfigurowaniu basen coś takiego:
OracleDataSource ods = new OracleDataSource();
ods.setURL("jdbc:oracle:thin:@tnsentryname");
ods.setUser("u");
ods.setPassword("p");
BTW, gdzie mogę ustawić połączenia wielkość puli?
Czy to jest to, co bym robił w każdym wątku, aby poprawnie korzystać z połączenia?
// THEAD metoda 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 nici metoda run
- Jeśli jakakolwiek fizyczna Podłączenie Pool jakoś awarii lub disconects będzie pula automatycznie próbować ponownie połączyć i wstrzyknąć nowe połączenie w puli, aby kolejne pool.getConnection() po prostu uzyskać połączenie zdrowia?
Bardzo dziękuję i wybacz mój zły angielski.
Wow !, dziękuję teabot jeszcze jedno, gdy już masz połączenie.Dlaczego api dzieli operacje, które mają być wykonane w bazie danych, w obiekcie Statement, a nie tylko za pomocą obiektu połączenia? Opowiadam się za przygotowanymi oświadczeniami. Ale w przypadku normalnych stwierdzeń, czy jest to tylko pozwolenie programistom na powiedzenie N operacji, które migth zostaną wykonane, czy nie, lub mogą być wykonywane wiele razy, po prostu? –
Po prostu zgaduję, ale: jak najwyraźniej zdajesz sobie sprawę, PreparedStatements muszą być oddzielone od połączeń, ponieważ może istnieć więcej niż jedno PreparedStatement dla połączenia. Przypuszczam więc, że ludzie z języka Java wypowiadali instrukcje oddzielnie, aby zachować je równolegle z PreparedStatements. W przeciwnym razie miałbyś cały szereg "funkcji instrukcji" w Połączeniu, a potem jeszcze jeden cały pakiet w PreparedStatement. To zepsułoby drzewo dziedziczenia Statement i PreparedStatement. Jak mówię, po prostu spekulacje. Jeśli ktokolwiek ma autorytatywne źródło, byłbym rozbawiony, gdyby to usłyszał. – Jay