Java Database Connectivity - API do łączenia się z DBMS ze strony aplikacji klienckiej.
Składa się z java.sql, czyli paczki dodającej główne klasy oraz interfejsy, oraz javax.sql, która zawiera dodatki po stronie strony serwerowej.

Dlaczego to jest mocne

  • wspiera prawie wszystkie dialekty SQL, ale również inne źródła danych, takie jak pliki z danami tabularnymi
  • aplikacja ma dostęp do prawie każdego źródła danych i może być wywołana z każdej maszyny z JVM.

Nawiązywanie połączenia z bazą danych

Ładowanie specyficznego sterownika JDBC

Plusy:

  • to samo API do wielu implementacji DBMS, bo sterownik sam ogrania połączenie, handshake i specyficzna implementacje dla tego DBMS
    Minusy:
  • driver zhardcode’owany w aplikacje, wymaga przepisanie oraz rekompilacji w przypadku zmiany.
  • utworzenie oraz zamknięcie połączenia jest kosztowne, wymagany connection pooling.

Connection pool

Robienie za każdym razem DriverManager.getConnection jest drogie, więc trzyma się pule otwartych połączeń po stronie serwera.

Wykorzystanie data source

W pliku XAML definiujesz connection stringa, nazwę tego “obiektu” na twojej maszynie a następnie wsadzasz do procesu nadrzędnego. Teraz nie masz tego zhardcode’owanego w kodzie oraz nie musisz samemu nawiązywać połączenia z bazą danych.
Plusy:

  • takie samo API na różne bazy danych
  • Nie ma hardcode’d danych o DBMS
  • łatwy connection pool
    Minusy:
  • twoja aplikacja musi być na tej samej maszynie co ten proces nadrzędny

Prepared statement

PreparedStatement ps = con.prepareStatement("update job set min_salary = ? where job_title = ?");
ps.setInt(1,100);
ps.setString(2, "cos");

Przyspiesza wielorazowe wykorzystanie tej samej “templatki” polecenia SQL tworząc zprekompilowane wyrażenie, zapobiegając SQL injection attack.

try-with-resources

Jako że zasoby mają być zwalniane ASAP (żeby uniknąć leaku), to można wykorzystywać strukturę try(), żeby jak najszybciej zamykać to połączenie/zasób.