java jdbc connection tutorial with programming example
Tento kurz připojení JDBC vysvětluje základní kroky k databázi s příklady a poskytuje připojovací řetězce JDBC pro různé databáze:
bezplatný převodník z youtube na mp3
V předchozím výukovém programu Série výukových programů JDBC , naučili jsme se komponenty, architekturu a typy ovladačů v prostředí Java Database Connectivity (JDBC).
V tomto kurzu probereme kroky pro připojení k databázím pomocí JDBC. Tento kurz vám ukáže, jak provést připojení JDBC a provádět operace s databází. JDBC API funguje jako rozhraní mezi programem Java a databází.
Na konci tohoto kurzu budete moci psát programy Java pro připojení k databázím a provádění operací DB.
Co se naučíte:
Kroky připojení JDBC
Existuje 6 základních kroků pro připojení k JDBC. Jsou zapsáni na následujícím obrázku:
# 1) Import balíčků
Nejprve musíme importovat existující balíčky, abychom je mohli použít v našem programu Java. Import zajistí, že pro program budou k dispozici třídy JDBC API. Pak můžeme použít třídy a podtřídy balíčků.
Bez ohledu na ovladač JDBC přidejte následující příkaz importu do programu Java.
import java.sql.*;
Importujte další třídy podle funkcí, které v programu použijete. Stáhněte si příslušné soubory Jar pro databázi, kterou použijete v programu.
Odkazovat na předchozí výukový program pro odkazy ke stažení souborů Jar pro vaši databázi.
JDBC API 4.0 poskytuje hlavně 2 důležité balíčky:
- java.sql
- javax.sql
(i) balíček java.sql
Tento balíček poskytuje třídy a rozhraní k provádění většiny funkcí JDBC, jako je vytváření a provádění dotazů SQL.
Třídy / Rozhraní | Popis |
---|---|
DriverManager | Poskytuje základní službu pro správu sady ovladačů JDBC |
KAPKA | Představuje hodnotu Blob SQL v programu Java |
Vyvolatelné prohlášení | Používá se k provádění uložených procedur SQL |
CLOB | Představuje hodnotu SQL Clob v programu Java |
Spojení | Vytvoří spojení (relaci) s konkrétní databází |
datum | Poskytuje podporu pro typ Date SQL |
Řidič | Vytvoří instanci ovladače s Správcem ovladačů |
ParametrMetaData | Jedná se o objekt, který lze použít k získání informací o typech a vlastnostech každého parametru v objektu PreparedStatement |
Připravené prohlášení | Používá se k vytvoření a provedení parametrizovaného dotazu v programu Java |
ResultSet | Používá se pro přístup k výsledku řádek po řádku |
ResultSetMetaData | Používá se k získání informací o typech a vlastnostech sloupců v objektu ResultSet |
RowId | Představuje hodnotu SQL ROWID |
Savepoint | Představuje bod uložení v transakci |
SQLData | Používá se k mapování typu User Defined Type (UDT) SQL na třídu v programu Java |
SQLXML | Představuje typ SQL XML |
Tvrzení | Používá se k provedení statického příkazu SQL |
DriverPropertyInfo | Poskytuje vlastnosti ovladače pro vytvoření připojení |
SQLException | Poskytuje informace o chybách databáze |
SQLTimeoutException | Je to podtřída SQLException vyvolána, když vypršel časový limit určený příkazem |
SQLWarning | Jedná se o výjimku, která poskytuje informace o varováních přístupu k databázi |
Struct | Jedná se o standardní mapování v programu Java pro strukturovaný typ SQL |
(ii) balíček javax.sql
Jedná se o rozšíření JDBC API a poskytuje přístup k datům a zpracování na straně serveru v programu Java.
Třídy / Rozhraní | Popis |
---|---|
ConnectionEvent | Poskytuje informace o výskytu událostí souvisejících s připojením |
CommonDataSource | Jedná se o rozhraní, které definuje metody, které jsou běžné mezi DataSource, XADataSource a ConnectionPoolDataSource |
ConnectionPoolDataSource | Je to továrna na objekty PooledConnection |
Zdroj dat | Je to továrna na připojení k fyzickému DataSource, který objekt představuje |
PooledConnection | Používá se ke správě Pool Connection |
Sada řádků | Poskytuje podporu rozhraní JDBC API pro komponentní model Java Beans |
RowSetMetadata | Má informace o sloupcích v objektu RowSet |
ConnectionEventListener | Používá se k registraci událostí objektu PooledConnection |
RowSetEvent | Vygeneruje se, když dojde k události v objektu Rowset |
StatementEvent | Je odeslána všem StatementEventListeners, které byly zaregistrovány s vygenerovaným PooledConnection |
# 2) Načíst ovladač
Nejprve bychom měli načíst / zaregistrovat ovladač v programu před připojením k databázi. Musíte ji zaregistrovat pouze jednou pro každou databázi v programu.
Ovladač můžeme načíst následujícími dvěma způsoby:
- Class.forName ()
- DriverManager.registerDriver ()
(i) Class.forName ()
Tímto způsobem se soubor třídy ovladače načte do paměti za běhu. Implicitně načte ovladač. Při načítání se ovladač automaticky zaregistruje u JDBC.
Název databáze | Název ovladače JDBC |
---|---|
Sybase | com.sybase.jdbcSybDriver |
MySQL | com.mysql.jdbc.Driver |
Věštec | 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 |
Poznámka: Metoda forName () je platná pouze pro virtuální stroje vyhovující JDK.
(ii) DriverManager.registerDriver ()
DriverManager je vestavěná třída, která je k dispozici v balíčku java.sql. Funguje jako prostředník mezi aplikací Java a databází, ke které se chcete připojit. Před připojením k databázi musíte ovladač zaregistrovat pomocí DriverManageru. Hlavní funkcí DriverManageru je načíst třídu ovladačů z databáze a vytvořit spojení s DB.
Veřejný statický neplatný registr Driver (driver) - Tato metoda zaregistruje ovladač pomocí Správce ovladačů. Pokud je řidič již zaregistrován, nebude podnikat žádné kroky.
- Bude to házet SQLException pokud dojde k chybě databáze.
- Bude to házet NullPointerException pokud je ovladač null.
DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver()) DriverManager.registerDriver(new com.microsoft.sqlserver.jdbc.SQLServerDriver())
Takto můžete zaregistrovat ovladač pro svou databázi předáním jako parametru.
# 3) Navažte připojení
Po načtení ovladače je dalším krokem vytvoření a navázání připojení. Jakmile se to vyžaduje, balíčky se importují a ovladače se načtou a zaregistrují, pak můžeme pokračovat v navázání připojení k databázi.
Třída DriverManager má metodu getConnection, tuto metodu použijeme k získání spojení s databází. Chcete-li volat metodu getConnection (), musíme předat 3 parametry. 3 parametry jsou URL datového typu řetězce, uživatelské jméno a heslo pro přístup do databáze.
Metoda getConnection () je přetížená metoda. Tyto 2 metody jsou:
- getConnection (URL, uživatelské jméno, heslo); - Má 3 parametry URL, uživatelské jméno, heslo.
- getConnection (URL); - Má pouze jeden parametr. URL má také uživatelské jméno a heslo.
V následující tabulce jsou uvedeny připojovací řetězce JDBC pro různé databáze:
Databáze | Připojovací řetězec / URL URL |
---|---|
Sybase | jdbc: Sybase: Tds: HOSTNAME: PORT / DATABASE_NAME |
MySQL | jdbc: mysql: // HOST_NAME: PORT / DATABASE_NAME |
Věštec | 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: // HOSTNAME: PORT / DATABASE_NAME |
TeraData | jdbc: teradata: // HOSTNAME / database =, tmode = ANSI, charset = UTF8 |
Příklad:
Connection con = DriverManager.getConnection(jdbc:oracle:thin:@localhost:1521:xe,System,Pass123@)
Zde v tomto příkladu
- tenký odkazuje na typ ovladače.
- localhost je místo, kde běží databáze Oracle.
- 1521 je číslo portu pro připojení k DB.
- vozidlo - SID
- Systém - Uživatelské jméno pro připojení k databázi Oracle.
- Pass123 @ - Heslo
# 4) Vytvoření a provedení prohlášení
Jakmile je připojení navázáno, můžeme komunikovat s připojenou databází. Nejprve musíme vytvořit příkaz k provedení dotazu SQL a poté provést příkaz.
(i) Vytvořit výpis
Nyní vytvoříme objekt příkazu, který spustí dotaz s připojenou databází. Používáme metodu createStatement Spojení třídy k vytvoření dotazu.
V balíčku java.sql jsou k dispozici 3 příkazová rozhraní. Níže jsou vysvětleny:
prohlášení
Toto rozhraní se používá k implementaci jednoduchých příkazů SQL bez parametrů. Vrátí objekt ResultSet.
Statement statemnt1 = conn.createStatement();
b) Připravené prohlášení
Toto rozhraní PreparedStatement rozšiřuje rozhraní Statement. Má tedy více funkcí než rozhraní Statement. Používá se k implementaci parametrizovaných a předkompilovaných příkazů SQL. Výkon aplikace se zvyšuje, protože kompiluje dotaz pouze jednou.
Je snadné znovu použít toto rozhraní s novým parametrem. Podporuje parametr IN. I my můžeme toto tvrzení použít bez jakéhokoli parametru.
String select_query = “Select * from states where state_id = 1”; PreparedStatement prpstmt = conn.prepareStatement(select_query);
c) Vyvolatelné prohlášení
Rozhraní CallableStatement rozšiřuje rozhraní PreparedStatement. Má tedy více funkcí než rozhraní PreparedStatement. Používá se k implementaci parametrizovaného příkazu SQL, který vyvolá proceduru nebo funkci v databázi. Uložená procedura funguje jako metoda nebo funkce ve třídě. Podporuje parametry IN a OUT.
Instance CallableStatement je vytvořena voláním metody PreparCall objektu Connection.
CallableStatementcallStmt = con.prepareCall('{call procedures(?,?)}');
(ii) Provést dotaz
K provedení dotazu v rozhraní příkazů existují 4 důležité metody. Níže jsou vysvětleny:
- ResultSet executeQuery (řetězec sql)
- int executeUpdate (řetězec sql)
- booleovské spuštění (řetězec sql)
- int () executeBatch ()
a) ResultSet executeQuery (řetězec sql)
Metoda executeQuery () v rozhraní příkazu se používá k provedení dotazu SQL a načtení hodnot z databáze. Vrátí objekt ResultSet. Normálně použijeme tuto metodu pro dotaz SELECT.
b) executeUpdate (řetězec sql)
Metoda executeUpdate () se používá k provádění dotazů zadaných na hodnoty, jako jsou příkazy INSERT, UPDATE, DELETE (příkazy DML) nebo příkazy DDL, které nic nevracejí. Většinou použijeme tuto metodu pro vkládání a aktualizaci.
c) provést (řetězec sql)
K provedení dotazu SQL se používá metoda execute (). Vrací se skutečný pokud provede dotaz SELECT. A vrátí se Nepravdivé pokud provede dotaz INSERT nebo UPDATE.
d) executeBatch ()
Tato metoda se používá k provedení dávky dotazů SQL do databáze a pokud se všechny dotazy úspěšně provedou, vrátí pole počtů aktualizací. Tuto metodu použijeme k vložení / aktualizaci většiny záznamů.
# 5) Načíst výsledky
Když provedeme dotazy pomocí metody executeQuery (), výsledek se uloží do objektu ResultSet. Vrácený objekt ResultSet nikdy nebude mít hodnotu null, i když v tabulce není žádný odpovídající záznam. Objekt ResultSet se používá pro přístup k datům načteným z databáze.
ResultSet rs 1= statemnt1.executeQuery(QUERY));
Pro dotaz SELECT můžeme použít metodu executeQuery (). Když se někdo pokusí provést dotaz na vložení / aktualizaci, vyvolá to SQLExecption se zprávou „ K aktualizaci nelze použít metodu executeQuery “.
Objekt ResultSet ukazuje na aktuální řádek v sadě výsledků. Chcete-li iterovat data v objektu ResultSet, zavolejte metodu next () ve smyčce while. Pokud již není žádný záznam ke čtení, vrátí FALSE.
ResultSet lze také použít k aktualizaci dat v DB. Data můžeme získat z ResultSet pomocí getrových metod, jako jsou getInt (), getString (), getDate (). Musíme předat index sloupce nebo název sloupce jako parametr, abychom získali hodnoty pomocí metod Getter.
V dalším kurzu se o ResultSet dozvíme více.
# 6) Ukončete připojení
Nakonec jsme skončili s manipulací s daty v DB. Nyní můžeme uzavřít připojení JDBC. Musíme se ujistit, že jsme zdroj uzavřeli poté, co jsme jej použili. Pokud je nezavřeme správně, můžeme skončit mimo spojení.
Když zavřeme objekt připojení, objekty Statement a ResultSet se automaticky uzavřou.
conn.close();
Od Javy 7 a dále můžeme automaticky uzavřít připojení JDBC pomocí bloku try-catch. Připojení JDBC by mělo být otevřeno v závorkách bloku try. Uvnitř bloku try můžete provádět databázová připojení normálně jako my.
Jakmile provedení ukončí blok try, automaticky se uzavře připojení. V takovém případě nemusíme ukončovat připojení voláním metody conn.close v programu Java.
try(Connection conn = DriverManager.getConnection(url, user, password)) { //database connection and operation }
Příklad připojení Java JDBC
V tomto příkladu uvidíte, jak implementovat 6 základních kroků pro připojení k databázi pomocí JDBC v programu Java.
Vytvořit tabulku
Před tím nejprve vytvořte jednu tabulku a přidejte do ní nějaké položky.
Níže je uveden dotaz SQL k vytvoření tabulky.
create table employee_details (empNum number(10), lastName varchar(50), firstName varchar(50), email varchar(255) , deptNum number(10), salary number(10));
V Oracle DB byla vytvořena tabulka „employee_details“.
jaký je váš přístup při testování mobilních aplikací
Vložte data do tabulky
Pomocí následujících dotazů vložte data do tabulky „employee_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
Stáhněte si soubor JDBC jar a importujte ho do projektu Java.
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(); } } }
Výstup:
Klíčové body, které je třeba poznamenat:
- Nejprve musíme importovat balíčky, které budeme používat v našem programu Java pro připojení JDBC. Můžeme tedy použít třídy, podtřídy a rozhraní v balíčcích.
- Před vytvořením připojení musíme zaregistrovat nebo načíst ovladač pomocí DriverManageru.
- Po registraci ovladače můžeme navázat spojení a provádět operace.
- Pomocí rozhraní příkazů můžeme vytvořit a spustit dotaz SQL. Pro jednoduchý dotaz SQL můžeme použít rozhraní příkazů. Pro vložení / aktualizaci / odstranění můžeme použít rozhraní PreparedStatement.
- Po provedení příkazu budou výsledky uloženy v objektu ResultSet. Výsledky z objektu ResultSet získáváme pomocí metody next () pro více než 1 záznam.
- Po dokončení operace s databází musíme připojení ukončit. Aby byl zdroj k dispozici ostatním k použití.
Často kladené otázky
Otázka č. 1) Jaké jsou základní kroky pro připojení k DB v Javě?
Odpovědět: Existuje 6 základních kroků pro připojení k DB v Javě.
Oni jsou:
- Import-Package
- Načíst ovladač
- Navázat spojení
- Vytvořte a proveďte příkaz
- Načíst výsledky
- Ukončete připojení
Otázka 2) Jaký je rozdíl mezi typy dat BLOB a CLOB v JDBC?
Odpovědět:
KAPKA se používá k uchovávání binárního typu dat. Velikost úložiště se může lišit v závislosti na databázích Příklad: obrázky, hlas, video.
CLOB se používá k uchování znakového typu dat. Stejně jako CLOB se úložný prostor může lišit v závislosti na databázi. Příklad: soubory.
Otázka č. 3) Jaká metoda třídy DriverManager se používá k navázání spojení s DB?
Odpovědět: Třída DriverManager má metodu getConnection (), která se používá k navázání spojení s DB.
Otázka č. 4) Jaký je rozdíl mezi Class.forName () a DriverManager.registerDriver ()?
Odpovědět: Class.forName () - Nejprve načte ovladač do paměti a poté zaregistruje příslušný ovladač ve Správci ovladačů. Poté vytvoří objekt ovladače, který provede připojení JDBC. Načte ovladač výslovně.
DriverManager.registerDriver () - Registruje ovladač implicitně.
Otázka č. 5) Co je únik připojení?
Odpovědět: K této situaci dochází, když je připojení otevřeno a neukončili jste ho. Pokud existuje blok kódu, který spojení otevře a neukončí. Kdykoli je tento blok kódu spuštěn, dojde k úniku připojení z fondu připojení.
Jakmile dojde k úniku všech dostupných připojení, nebude k dispozici žádné připojení a aplikace přestane reagovat. Nakolik je důležité spojení otevřít, nakolik je důležité ho uzavřít.
Otázka č. 6) Je nutné ukončit připojení?
Odpovědět: Pokud používáte verze Java pod 7, musíte připojení ukončit ručně.
Z verzí výše Java 7 můžeme uzavřít připojení automaticky otevřením kódu připojení JDBC v závorkách bloku try. Jakmile program opustí blok try, automaticky uzavře připojení.
Závěr
V tomto kurzu jsme diskutovali o tom, jak navázat připojení JDBC. Nyní můžete provádět operace DB pomocí JDBC v programu Java. Prozkoumali jsme 6 základních kroků pro připojení k databázi. Abychom jej mohli používat, musíme importovat balíčky v našem Java programu.
Jakmile zaregistrujeme ovladač, můžeme navázat spojení. Můžeme vytvořit a provést příkaz SQL pomocí rozhraní Statement a načíst výsledky v objektu ResultSet. Jako poslední krok bychom měli spojení ukončit.
Doporučené čtení
- Výukový program Java JDBC: Co je JDBC (Java Database Connectivity)
- Výukový program pro rozhraní Java a abstrakt třídy s příklady
- Správa transakcí Java JDBC s příkladem
- JDBC DriverManager, JDBC PreparedStatement And Statement
- JDBC ResultSet: Jak používat sadu Java ResultSet k načtení dat
- Výukový program JAVA pro začátečníky: 100+ praktických výukových programů Java Video
- Úvod do programovacího jazyka Java - výukový program
- Testování databáze selenu (pomocí WebDriver a JDBC API)