java jdbc connection tutorial with programming example
W tym samouczku dotyczącym połączeń JDBC wyjaśniono podstawowe kroki prowadzące do bazy danych wraz z przykładami i podano parametry połączenia JDBC dla różnych baz danych:
co to jest klucz bezpieczeństwa sieci dla wifi
W poprzednim samouczku dotyczącym Seria samouczków JDBC , poznaliśmy komponenty, architekturę i typy sterowników w Java Database Connectivity (JDBC).
W tym samouczku omówimy kroki, aby połączyć się z bazami danych za pomocą JDBC. Ten samouczek pokaże, jak nawiązać połączenie JDBC i wykonać operacje na bazie danych. JDBC API działa jako interfejs między programem Java a bazą danych.
Pod koniec tego samouczka będziesz w stanie pisać programy w języku Java do łączenia się z bazami danych i wykonywania operacji na bazach danych.
Czego się nauczysz:
Kroki połączenia JDBC
Istnieje 6 podstawowych kroków, aby połączyć się z JDBC. Są one wymienione na poniższym obrazku:
# 1) Importuj pakiety
Najpierw musimy zaimportować istniejące pakiety, aby użyć ich w naszym programie Java. Import upewni się, że klasy JDBC API są dostępne dla programu. Następnie możemy użyć klas i podklas pakietów.
Niezależnie od sterownika JDBC dodaj następującą instrukcję importu do programu Java.
import java.sql.*;
Zaimportuj pozostałe klasy w oparciu o funkcjonalność, której będziesz używać w programie. Pobierz odpowiednie pliki JAR dla bazy danych, której będziesz używać w programie.
Zapoznaj się z poprzedni tutorial aby uzyskać linki do pobierania plików Jar do Twojej bazy danych.
JDBC API 4.0 zapewnia głównie 2 ważne pakiety:
- java.sql
- javax.sql
(i) pakiet java.sql
Ten pakiet zawiera klasy i interfejsy do wykonywania większości funkcji JDBC, takich jak tworzenie i wykonywanie zapytań SQL.
Klasy / interfejsy | Opis |
---|---|
DriverManager | Zapewnia podstawową usługę zarządzania zestawem sterowników JDBC |
KROPELKA | Reprezentuje wartość obiektu Blob SQL w programie Java |
CallableStatement | Służy do wykonywania procedur składowanych SQL |
CLOB | Reprezentuje wartość SQL Clob w programie Java |
Połączenie | Tworzy połączenie (sesję) z określoną Bazą Danych |
Data | Zapewnia obsługę typu Date SQL |
Kierowca | Tworzy instancję sterownika z menedżerem sterowników |
ParameterMetaData | Jest to obiekt, którego można użyć do uzyskania informacji o typach i właściwościach każdego parametru w obiekcie PreparedStatement |
Przygotowane oświadczenie | Służy do tworzenia i wykonywania sparametryzowanych zapytań w programie Java |
Zestaw wyników | Służy do uzyskiwania dostępu do wyniku wiersz po wierszu |
ResultSetMetaData | Służy do uzyskiwania informacji o typach i właściwościach kolumn w obiekcie ResultSet |
RowId | Reprezentuje wartość SQL ROWID |
Punkt zapisu | Reprezentuje punkt zapisu w transakcji |
SQLData | Służy do odwzorowania typu zdefiniowanego przez użytkownika (UDT) SQL na klasę w programie Java |
SQLXML | Reprezentuje typ SQL XML |
Komunikat | Służy do wykonywania statycznej instrukcji SQL |
DriverPropertyInfo | Udostępnia właściwości sterownika umożliwiające nawiązanie połączenia |
SQLException | Dostarcza informacji o błędach bazy danych |
SQLTimeoutException | Jest to podklasa SQLException zgłaszana, gdy upłynął limit czasu określony w instrukcji |
SQLWarning | Jest to wyjątek, który dostarcza informacji o ostrzeżeniach dotyczących dostępu do bazy danych |
Struct | Jest to standardowe odwzorowanie w programie Java dla typu strukturalnego SQL |
(ii) pakiet javax.sql
Jest to rozszerzenie interfejsu API JDBC i zapewnia dostęp do danych po stronie serwera i przetwarzanie ich w programie Java.
Klasy / interfejsy | Opis |
---|---|
ConnectionEvent | Zawiera informacje o wystąpieniu zdarzeń związanych z połączeniem |
CommonDataSource | Jest to interfejs definiujący metody, które są wspólne dla DataSource, XADataSource i ConnectionPoolDataSource |
ConnectionPoolDataSource | Jest to fabryka obiektów PooledConnection |
Źródło danych | Jest to fabryka połączeń z fizycznym źródłem danych, które reprezentuje obiekt |
PooledConnection | Służy do zarządzania pulą połączeń |
RowSet | Zapewnia obsługę JDBC API for Java Beanie Component Model |
RowSetMetadata | Zawiera informacje o kolumnach w obiekcie RowSet |
ConnectionEventListener | Służy do rejestrowania zdarzeń obiektu PooledConnection |
RowSetEvent | Generuje się, gdy zdarzenie wystąpi w obiekcie Rowset |
StatementEvent | Jest wysyłany do wszystkich StatementEventListeners, które zostały zarejestrowane za pomocą wygenerowanego obiektu PooledConnection |
# 2) Załaduj sterownik
Najpierw należy załadować / zarejestrować sterownik w programie przed połączeniem się z Bazą Danych. Wystarczy zarejestrować ją tylko raz na bazę danych w programie.
Możemy załadować sterownik na 2 sposoby:
- Class.forName ()
- DriverManager.registerDriver ()
(i) Class.forName ()
W ten sposób plik klasy sterownika ładuje się do pamięci w czasie wykonywania. Niejawnie ładuje sterownik. Podczas ładowania sterownik automatycznie zarejestruje się w JDBC.
Nazwa bazy danych | Nazwa sterownika JDBC |
---|---|
Sybase | com.sybase.jdbcSybDriver |
MySQL | com.mysql.jdbc.Driver |
Wyrocznia | oracle.jdbc.driver.OracleDriver |
Microsoft SQL Server | com.microsoft.sqlserver.jdbc.SQLServerDriver |
MS Access | net.ucanaccess.jdbc.UcanaccessDriver |
PostgreSQL | org.postgresql.Driver |
IBM DB2 | com.ibm.db2.jdbc.net.DB2Driver |
TeraData | com.teradata.jdbc.TeraDriver |
Uwaga: Metoda forName () jest poprawna tylko dla maszyn wirtualnych zgodnych z JDK.
(ii) DriverManager.registerDriver ()
DriverManager to wbudowana klasa dostępna w pakiecie java.sql. Działa jako pośrednik między aplikacją Java a bazą danych, z którą chcesz się połączyć. Zanim połączysz się z bazą danych, musisz zarejestrować sterownik w DriverManager. Główną funkcją DriverManagera jest załadowanie klasy sterownika bazy danych i utworzenie połączenia z bazą danych.
Publiczny statyczny rejestr nieważności Kierowca (kierowca) - Ta metoda zarejestruje sterownik w programie Driver Manager. Jeśli sterownik jest już zarejestrowany, nie podejmie żadnych działań.
- Będzie rzucać SQLException jeśli wystąpi błąd bazy danych.
- Będzie rzucać NullPointerException jeśli sterownik jest pusty.
DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver()) DriverManager.registerDriver(new com.microsoft.sqlserver.jdbc.SQLServerDriver())
W ten sposób możesz zarejestrować sterownik dla swojej bazy danych, przekazując go jako parametr.
# 3) Ustanów połączenie
Po załadowaniu sterownika kolejnym krokiem jest utworzenie i nawiązanie połączenia. Gdy jest to wymagane, pakiety są importowane, a sterowniki są ładowane i rejestrowane, a następnie możemy nawiązać połączenie z bazą danych.
Klasa DriverManager ma metodę getConnection, użyjemy tej metody do uzyskania połączenia z bazą danych. Aby wywołać metodę getConnection (), musimy przekazać 3 parametry. Trzy parametry to URL typu danych łańcuchowych, nazwa użytkownika i hasło dostępu do bazy danych.
Metoda getConnection () jest metodą przeciążoną. Dwie metody to:
- getConnection (adres URL, nazwa użytkownika, hasło); - Posiada 3 parametry URL, nazwę użytkownika, hasło.
- getConnection (URL); - Ma tylko jeden parametr. URL zawiera również nazwę użytkownika i hasło.
W poniższej tabeli wymieniono parametry połączenia JDBC dla różnych baz danych:
Baza danych | Parametry połączenia / adres URL bazy danych |
---|---|
Sybase | jdbc: Sybase: Tds: HOSTNAME: PORT / DATABASE_NAME |
MySQL | jdbc: mysql: // NAZWA HOSTA: PORT / NAZWA BAZY DANYCH |
Wyrocznia | jdbc: oracle: thin: @HOST_NAME: PORT: SERVICE_NAME |
Microsoft SQL Server | jdbc: sqlserver: // HOST_NAME: PORT; DatabaseName = |
MS Access | jdbc: ucanaccess: // DATABASE_PATH |
PostgreSQL | jdbc: postgresql: // HOST_NAME: PORT / DATABASE_NAME |
IBM DB2 | jdbc: db2: // NAZWA HOSTA: PORT / NAZWA BAZY DANYCH |
TeraData | jdbc: teradata: // NAZWA HOSTA / database =, tmode = ANSI, charset = UTF8 |
Przykład:
Connection con = DriverManager.getConnection(jdbc:oracle:thin:@localhost:1521:xe,System,Pass123@)
W tym przykładzie
- cienki odnosi się do typu sterownika.
- Lokalny Gospodarz to miejsce, w którym działa baza danych Oracle.
- 1521 to numer portu do połączenia z DB.
- pojazd - SID
- System - Nazwa użytkownika do połączenia z bazą danych Oracle.
- Pass123 @ - Hasło
# 4) Utwórz i wykonaj instrukcję
Po nawiązaniu połączenia możemy współpracować z podłączoną bazą danych. Najpierw musimy utworzyć instrukcję, aby wykonać zapytanie SQL, a następnie wykonać instrukcję.
(i) Utwórz instrukcję
Teraz utworzymy obiekt instrukcji, który uruchamia zapytanie z podłączoną bazą danych. Używamy metody createStatement klasy Połączenie klasa, aby utworzyć zapytanie.
W pakiecie java.sql dostępne są 3 interfejsy instrukcji. Są one wyjaśnione poniżej:
oświadczenie
Ten interfejs służy do implementacji prostych instrukcji SQL bez parametrów. Zwraca obiekt ResultSet.
Statement statemnt1 = conn.createStatement();
b) Przygotowane oświadczenie
Ten interfejs PreparedStatement stanowi rozszerzenie interfejsu instrukcji. Ma więc więcej funkcji niż interfejs instrukcji. Służy do implementacji sparametryzowanych i prekompilowanych instrukcji SQL. Wydajność aplikacji wzrasta, ponieważ kompiluje ona zapytanie tylko raz.
Ponowne użycie tego interfejsu z nowym parametrem jest łatwe. Obsługuje parametr IN. Nawet my możemy użyć tej instrukcji bez żadnego parametru.
String select_query = “Select * from states where state_id = 1”; PreparedStatement prpstmt = conn.prepareStatement(select_query);
c) CallableStatement
Interfejs CallableStatement rozszerza interfejs PreparedStatement. Tak więc ma więcej funkcji niż interfejs PreparedStatement. Służy do implementacji sparametryzowanej instrukcji SQL, która wywołuje procedurę lub funkcję w bazie danych. Procedura składowana działa jak metoda lub funkcja w klasie. Obsługuje parametry IN i OUT.
Instancja CallableStatement jest tworzona przez wywołanie metody readyCall obiektu Connection.
CallableStatementcallStmt = con.prepareCall('{call procedures(?,?)}');
(ii) Wykonaj zapytanie
Istnieją 4 ważne metody wykonania zapytania w interfejsie instrukcji. Są one wyjaśnione poniżej:
- Zestaw wyników executeQuery (String sql)
- int executeUpdate (String sql)
- boolean execute (String sql)
- int () executeBatch ()
a) Zestaw wyników executeQuery (String sql)
Metoda executeQuery () w interfejsie instrukcji służy do wykonywania zapytania SQL i pobierania wartości z bazy danych. Zwraca obiekt ResultSet. Zwykle użyjemy tej metody do zapytania SELECT.
b) executeUpdate (String sql)
Metoda executeUpdate () służy do wykonywania zapytań o określonej wartości, takich jak INSERT, UPDATE, DELETE (instrukcje DML) lub instrukcje DDL, które nic nie zwracają. Przeważnie będziemy używać tej metody do wstawiania i aktualizowania.
c) wykonaj (String sql)
Metoda execute () służy do wykonywania zapytania SQL. Wraca prawdziwe jeśli wykonuje zapytanie SELECT. I wraca fałszywy jeśli wykonuje zapytanie INSERT lub UPDATE.
d) executeBatch ()
Ta metoda służy do wykonywania partii zapytań SQL do bazy danych i jeśli wszystkie zapytania zostaną wykonane pomyślnie, zwraca tablicę liczników aktualizacji. Użyjemy tej metody do wstawiania / aktualizowania większości rekordów.
# 5) Pobierz wyniki
Kiedy wykonujemy zapytania metodą executeQuery (), wynik zostanie zapisany w obiekcie ResultSet. Zwrócony obiekt ResultSet nigdy nie będzie miał wartości null, nawet jeśli w tabeli nie ma pasującego rekordu. Obiekt ResultSet służy do uzyskiwania dostępu do danych pobranych z bazy danych.
ResultSet rs 1= statemnt1.executeQuery(QUERY));
W zapytaniu SELECT możemy użyć metody executeQuery (). Gdy ktoś spróbuje wykonać zapytanie wstawiające / aktualizujące, wyrzuci SQLExecption z komunikatem „ Nie można użyć metody executeQuery do aktualizacji ”.
Obiekt ResultSet wskazuje na bieżący wiersz w zestawie wyników. Aby wykonać iterację danych w obiekcie ResultSet, wywołaj metodę next () w pętli while. Jeśli nie ma więcej rekordów do odczytania, zwróci FALSE.
Zestaw wyników może również służyć do aktualizowania danych w bazie danych. Możemy pobrać dane z ResultSet za pomocą metod pobierających, takich jak getInt (), getString (), getDate (). Musimy przekazać indeks kolumny lub nazwę kolumny jako parametr, aby uzyskać wartości za pomocą metod Getter.
Dowiemy się więcej o zestawie wyników w następnym samouczku.
# 6) Zamknij połączenie
Wreszcie mamy już za sobą manipulowanie danymi w DB. Teraz możemy zamknąć połączenie JDBC. Musimy się upewnić, że zasób został zamknięty po jego wykorzystaniu. Jeśli nie zamkniemy ich odpowiednio, możemy skończyć z brakiem połączeń.
Kiedy zamykamy obiekt połączenia, obiekty Statement i ResultSet zostaną automatycznie zamknięte.
conn.close();
Począwszy od Java 7 możemy automatycznie zamykać połączenia JDBC za pomocą bloku try-catch. Połączenie JDBC powinno być otwierane w nawiasach bloku try. Wewnątrz bloku try możesz normalnie nawiązywać połączenia z bazą danych, tak jak my.
Gdy wykonanie wyjdzie z bloku try, automatycznie zamknie połączenie. W tym przypadku nie musimy zamykać połączenia przez wywołanie metody conn.close w programie Java.
try(Connection conn = DriverManager.getConnection(url, user, password)) { //database connection and operation }
Przykład połączenia Java JDBC
W tym przykładzie zobaczysz, jak zaimplementować 6 podstawowych kroków, aby połączyć się z bazą danych za pomocą JDBC w programie Java.
Utwórz tabelę
Wcześniej najpierw utwórz jedną tabelę i dodaj do niej kilka wpisów.
Poniżej znajduje się zapytanie SQL służące do tworzenia tabeli.
create table employee_details (empNum number(10), lastName varchar(50), firstName varchar(50), email varchar(255) , deptNum number(10), salary number(10));
Utworzono tabelę „Employer_details” w Oracle DB.
Wstaw dane do tabeli
Korzystając z poniższych zapytań, wstaw dane do tabeli „Employer_details”.
insert into employee_details values (1001, 'Luther', 'Martin', 'ml@gmail.com', 1, 13000); insert into employee_details values (1002, 'Murray', 'Keith', 'km@gmail.com', 2, 25000); insert into employee_details values (1003, 'Branson', 'John', 'jb@gmail.com', 3, 15000); insert into employee_details values (1004, 'Martin', 'Richard', 'rm@gmail.com', 4, 16000); insert into employee_details values (1005, 'Hickman', 'David', 'dh@gmail.com', 5, 17000);
Program Java
Pobierz plik jar JDBC i zaimportuj go do projektu Java.
różnica między testowaniem systemu a testowaniem akceptacyjnym użytkownika
package com.STH.JDBC; // import sql package to use it in our program import java.sql.*; public class Sample_JDBC_Program { public static void main(String() args) throws ClassNotFoundException, SQLException { // store the SQL statement in a string String QUERY = 'select * from employee_details'; //register the oracle driver with DriverManager Class.forName('oracle.jdbc.driver.OracleDriver'); //Here we have used Java 8 so opening the connection in try statement try(Connection conn = DriverManager.getConnection('jdbc:oracle:thin:system/pass123@localhost:1521:XE')) { Statement statemnt1 = conn.createStatement(); //Created statement and execute it ResultSet rs1 = statemnt1.executeQuery(QUERY); { //Get the values of the record using while loop while(rs1.next()) { int empNum = rs1.getInt('empNum'); String lastName = rs1.getString('lastName'); String firstName = rs1.getString('firstName'); String email = rs1.getString('email'); String deptNum = rs1.getString('deptNum'); String salary = rs1.getString('salary'); //store the values which are retrieved using ResultSet and print it System.out.println(empNum + ',' +lastName+ ',' +firstName+ ',' +email +','+deptNum +',' +salary); } } } catch (SQLException e) { //If exception occurs catch it and exit the program e.printStackTrace(); } } }
Wynik:
Najważniejsze punkty, na które należy zwrócić uwagę:
- Najpierw musimy zaimportować pakiety, których będziemy używać w naszym programie Java do połączenia JDBC. Możemy więc używać klas, podklas i interfejsów w pakietach.
- Musimy zarejestrować lub załadować sterownik za pomocą DriverManager przed nawiązaniem połączenia.
- Po zarejestrowaniu sterownika możemy nawiązać połączenie i wykonać operacje.
- Korzystając z interfejsu instrukcji możemy stworzyć i wykonać zapytanie SQL. Do prostego zapytania SQL możemy użyć interfejsu instrukcji. Do wstawiania / aktualizowania / usuwania możemy użyć interfejsu PreparedStatement.
- Po wykonaniu instrukcji wyniki zostaną zapisane w obiekcie ResultSet. Otrzymujemy wyniki z obiektu ResultSet przy użyciu metody next () dla więcej niż 1 rekordu.
- Po zakończeniu operacji na bazie danych musimy zamknąć połączenie. Aby zasób był dostępny dla innych do użytku.
Często Zadawane Pytania
Pytanie 1) Jakie są podstawowe kroki, aby połączyć się z bazą danych w Javie?
Odpowiedź: Istnieje 6 podstawowych kroków, aby połączyć się z bazą danych w Javie.
Oni są:
- Pakiet importowy
- Załaduj sterownik
- Ustanów połączenie
- Utwórz i wykonaj instrukcję
- Pobierz wyniki
- Zamknij połączenie
P # 2) Jaka jest różnica między typami danych BLOB i CLOB w JDBC?
Odpowiedź:
KROPELKA służy do przechowywania danych binarnych. Rozmiar magazynu może się różnić w zależności od baz danych Przykład: obrazy, głos, wideo.
CLOB służy do przechowywania danych typu znakowego. Podobnie jak CLOB, przestrzeń do przechowywania może się różnić w zależności od DB. Przykład: akta.
Pytanie 3) Która metoda klasy DriverManager jest używana do nawiązywania połączenia z bazą danych?
Odpowiedź: Klasa DriverManager ma metodę getConnection (), która służy do nawiązywania połączenia z bazą danych.
P # 4) Jaka jest różnica między Class.forName () a DriverManager.registerDriver ()?
Odpowiedź: Class.forName () - Najpierw ładuje sterownik do pamięci, a następnie rejestruje odpowiedni sterownik w Menedżerze sterowników. Następnie utworzy obiekt sterownika do wykonania połączenia JDBC. Spowoduje to jawne załadowanie sterownika.
DriverManager.registerDriver () - Rejestruje sterownik niejawnie.
P # 5) Co to jest przeciek połączenia?
Odpowiedź: Taka sytuacja ma miejsce, gdy połączenie jest otwarte, a Ty go nie zamknąłeś. Jeśli istnieje blok kodu, który otwiera połączenie i nie zamyka połączenia. Za każdym razem, gdy ten blok kodu jest wykonywany, połączenie wycieknie z puli połączeń.
Gdy wszystkie dostępne połączenia zostaną wyciekłe, żadne połączenie nie będzie dostępne i aplikacja się zawiesi. Jak bardzo ważne jest, aby otworzyć połączenie, tak bardzo ważne jest, aby je zamknąć.
P # 6) Czy zamykanie połączenia jest obowiązkowe?
Odpowiedź: Jeśli korzystasz z wersji Java poniżej 7, musisz ręcznie zamknąć połączenie.
Od wersji powyżej Java 7 możemy automatycznie zamknąć połączenie, otwierając kod połączenia JDBC w nawiasie bloku try. Gdy program wyjdzie z bloku try, automatycznie zamknie połączenie.
Wniosek
W tym samouczku omówiliśmy, jak nawiązać połączenie JDBC. Teraz możesz wykonywać operacje na bazie danych za pomocą JDBC w programie Java. Przeanalizowaliśmy 6 podstawowych kroków, aby połączyć się z bazą danych. Aby z niego skorzystać, musimy zaimportować pakiety do naszego programu Java.
Po zarejestrowaniu sterownika możemy nawiązać połączenie. Możemy utworzyć i wykonać instrukcję SQL za pomocą interfejsu instrukcji i pobrać wyniki w obiekcie ResultSet. Na koniec powinniśmy zamknąć połączenie.
rekomendowane lektury
- Samouczek Java JDBC: Co to jest JDBC (łączność z bazą danych Java)
- Interfejs Java i samouczek klasy abstrakcyjnej z przykładami
- Zarządzanie transakcjami Java JDBC z przykładem
- JDBC DriverManager, JDBC PreparedStatement And Statement
- JDBC ResultSet: jak używać Java ResultSet do pobierania danych
- Samouczek JAVA dla początkujących: ponad 100 praktycznych samouczków wideo Java
- Wprowadzenie do języka programowania Java - samouczek wideo
- Testowanie bazy danych selenu (przy użyciu WebDriver i JDBC API)