java jdbc connection tutorial with programming example
Denna JDBC-anslutningshandledning förklarar grundläggande steg till en databas med exempel och ger JDBC-anslutningssträngar för olika databaser:
topp 5 spionappar för Android
I föregående handledning av JDBC-handledningsserie , vi lärde oss komponenter, arkitektur och typer av drivrutiner i Java Database Connectivity (JDBC).
I denna handledning kommer vi att diskutera stegen för att ansluta till databaser med JDBC. Denna handledning visar hur du gör JDBC-anslutning och utför databasåtgärder. JDBC API fungerar som ett gränssnitt mellan Java-programmet och databasen.
I slutet av denna handledning kommer du att kunna skriva Java-program för att ansluta till databaser och utföra DB-operationer.
Vad du kommer att lära dig:
Steg för JDBC-anslutning
Det finns 6 grundläggande steg för att ansluta till JDBC. De visas i bilden nedan:
# 1) Importera paket
Först måste vi importera befintliga paket för att kunna använda det i vårt Java-program. Import ser till att JDBC API-klasser är tillgängliga för programmet. Vi kan sedan använda klassen och underklasserna för paketen.
Oavsett JDBC-drivrutinen, lägg till följande importuttalande i Java-programmet.
import java.sql.*;
Importera de andra klasserna baserat på den funktionalitet som du kommer att använda i programmet. Ladda ner lämpliga Jar-filer för databasen som du kommer att använda i programmet.
Referera till föregående handledning för länkarna för att ladda ner Jar-filer till din databas.
JDBC API 4.0 tillhandahåller huvudsakligen två viktiga paket:
- java.sql
- javax.sql
(i) paketet java.sql
Detta paket innehåller klasser och gränssnitt för att utföra de flesta av JDBC-funktionerna som att skapa och köra SQL-frågor.
Klasser / gränssnitt | Beskrivning |
---|---|
DriverManager | Det tillhandahåller grundläggande service för att hantera en uppsättning JDBC-drivrutiner |
KLICK | Det representerar SQL Blob-värde i Java-programmet |
CallableStatement | Den används för att utföra lagrade SQL-procedurer |
CLOB | Det representerar SQL Clob-värdet i Java-programmet |
Förbindelse | Det skapar en anslutning (session) med en specifik databas |
Datum | Det ger stöd för Date SQL-typen |
Förare | Det skapar en instans av en drivrutin med Driver Manager |
ParameterMetaData | Det är ett objekt som kan användas för att få information om typerna och egenskaperna för varje parameter i ett PreparedStatement-objekt |
Förberett uttalande | Den används för att skapa och köra en parametrerad fråga i Java-programmet |
Resultatet satt | Det används för att komma åt resultatet rad för rad |
ResultSetMetaData | Den används för att få information om kolumnernas typer och egenskaper i ett ResultSet-objekt |
RowId | Det representerar SQL ROWID-värdet |
Savepoint | Det representerar sparpunkt i transaktion |
SQLData | Den används för att mappa SQL User Defined Type (UDT) till en klass i Java-program |
SQLXML | Det representerar SQL XML-typ |
Påstående | Den används för att utföra en statisk SQL-sats |
DriverPropertyInfo | Det ger drivrutinsegenskaper för att skapa en anslutning |
SQLException | Den ger information om databasfel |
SQLTimeoutException | Det är en underklass av SQLException som kastas när den timeout som anges i uttalandet har gått ut |
SQLWarning | Det är ett undantag som ger information om databasåtkomstvarningar |
Struct | Det är en standardmappning i Java-program för SQL-strukturerad typ |
(ii) paketet javax.sql
Det är ett JDBC-tilläggs-API och tillhandahåller åtkomst och bearbetning av serversidan på Java-programmet.
Klasser / gränssnitt | Beskrivning |
---|---|
ConnectionEvent | Den ger information om förekomsten av anslutningsrelaterade händelser |
CommonDataSource | Det är ett gränssnitt som definierar de metoder som är vanliga mellan DataSource, XADataSource och ConnectionPoolDataSource |
ConnectionPoolDataSource | Det är en fabrik för PooledConnection-objekt |
Datakälla | Det är en fabrik för anslutningar till den fysiska datakällan som objektet representerar |
PooledConnection | Den används för att hantera Connection Pool |
RowSet | Det ger stöd till JDBC API för komponentmodell för Java-bönor |
RowSetMetadata | Den har informationen om kolumnerna i ett RowSet-objekt |
ConnectionEventListener | Det används för att registrera PooledConnection-objekthändelser |
RowSetEvent | Det genereras när en händelse inträffar för ett Rowset-objekt |
StatementEvent | Det skickas till alla StatementEventListeners som registrerades med en PooledConnection-genererad |
# 2) Ladda drivrutinen
Först bör vi ladda / registrera drivrutinen i programmet innan vi ansluter till databasen. Du behöver bara registrera den en gång per databas i programmet.
Vi kan ladda föraren på följande två sätt:
- Class.forName ()
- DriverManager.registerDriver ()
(i) Klass. för namn ()
På detta sätt laddas förarklassfilen i minnet vid körning. Det laddar implicit föraren. Under laddningen registreras föraren automatiskt med JDBC.
DB-namn | JDBC-drivrutinsnamn |
---|---|
Sybase | com.sybase.jdbcSybDriver |
MySQL | com.mysql.jdbc.Driver |
Orakel | 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 |
Notera: metoden forName () är endast giltig för JDK-kompatibla virtuella maskiner.
(ii) DriverManager.registerDriver ()
DriverManager är en inbyggd klass som finns i paketet java.sql. Det fungerar som en medlare mellan Java-applikationen och databasen som du vill ansluta. Innan du ansluter till databasen måste du registrera drivrutinen hos DriverManager. DriverManager har som huvudfunktion att ladda förarklassen i databasen och skapa en anslutning med DB.
Offentligt statiskt ogiltigt register Drivrutin (drivrutin) - Den här metoden registrerar drivrutinen hos Driver Manager. Om föraren redan är registrerad kommer den inte att vidta några åtgärder.
- Det kommer att kasta SQLException om databasfelet uppstår.
- Det kommer att kasta NullPointerException om föraren är noll.
DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver()) DriverManager.registerDriver(new com.microsoft.sqlserver.jdbc.SQLServerDriver())
Så här kan du registrera drivrutinen för din databas genom att skicka den som en parameter.
# 3) Upprätta anslutning
Efter att ha laddat drivrutinen är nästa steg att skapa och upprätta anslutningen. När det behövs importeras paket och drivrutiner laddas och registreras, så kan vi gå för att upprätta en databasanslutning.
DriverManager-klassen har getConnection-metoden, vi använder den här metoden för att få anslutningen till databasen. För att anropa getConnection () -metoden måste vi skicka tre parametrar. De tre parametrarna är webbadress för strängdatatyp, ett användarnamn och ett lösenord för att komma åt databasen.
Metoden getConnection () är en överbelastad metod. De två metoderna är:
- getConnection (URL, användarnamn, lösenord); - Den har tre parametrar URL, användarnamn, lösenord.
- getConnection (URL); - Den har bara en parameter. URL har också ett användarnamn och lösenord.
I följande tabell listas JDBC-anslutningssträngarna för de olika databaserna:
Databas | Anslutningssträng / DB-URL |
---|---|
Sybase | jdbc: Sybase: Tds: VÄSTNAMN: PORT / DATABASE_NAME |
MySQL | jdbc: mysql: // HOST_NAME: PORT / DATABASE_NAME |
Orakel | jdbc: oracle: thin: @HOST_NAME: PORT: SERVICE_NAME |
Microsoft SQL Server | jdbc: sqlserver: // HOST_NAME: PORT; Databasnamn = |
MS Access | jdbc: ucanaccess: // DATABASE_PATH |
PostgreSQL | jdbc: postgresql: // HOST_NAME: PORT / DATABASE_NAME |
IBM DB2 | jdbc: db2: // VÄSTNAMN: PORT / DATABASE_NAME |
TeraData | jdbc: teradata: // HOSTNAME / database =, tmode = ANSI, charset = UTF8 |
Exempel:
Connection con = DriverManager.getConnection(jdbc:oracle:thin:@localhost:1521:xe,System,Pass123@)
Här i detta exempel,
- tunn hänvisar till förartypen.
- lokal värd är där Oracle-databasen körs.
- 1521 är portnumret för att ansluta till DB.
- fordon - SID
- Systemet - Användarnamn för att ansluta till Oracle Database.
- Pass123 @ - Lösenord
# 4) Skapa och kör uttalanden
När anslutningen har upprättats kan vi interagera med den anslutna databasen. Först måste vi skapa uttalandet för att utföra SQL-frågan och sedan utföra uttalandet.
(i) Skapa uttalande
Nu skapar vi uttalandeobjektet som kör frågan med den anslutna databasen. Vi använder createStatement-metoden för Förbindelse klass för att skapa frågan.
Det finns 3 uttalande-gränssnitt finns i paketet java.sql. Dessa förklaras nedan:
ett påstående
Detta gränssnitt används för att implementera enkla SQL-satser utan parameter. Det returnerar ResultSet-objektet.
Statement statemnt1 = conn.createStatement();
b) PreparedStatement
Detta PreparedStatement-gränssnitt utökar uttalande-gränssnittet. Så det har fler funktioner än uttalandegränssnittet. Den används för att implementera parametrerade och förkompilerade SQL-satser. Applikationens prestanda ökar eftersom den sammanställer frågan bara en gång.
Det är enkelt att återanvända detta gränssnitt med en ny parameter. Den stöder IN-parametern. Även vi kan använda detta uttalande utan någon parameter.
String select_query = “Select * from states where state_id = 1”; PreparedStatement prpstmt = conn.prepareStatement(select_query);
c) CallableStatement
CallableStatement-gränssnittet utökar PreparedStatement-gränssnittet. Så det har fler funktioner än PreparedStatement-gränssnittet. Den används för att implementera ett parametrerat SQL-uttalande som åberopar procedur eller funktion i databasen. En lagrad procedur fungerar som en metod eller funktion i en klass. Den stöder parametrarna IN och OUT.
Instansen CallableStatement skapas genom att anropa preparatCall-metoden för anslutningsobjektet.
CallableStatementcallStmt = con.prepareCall('{call procedures(?,?)}');
(ii) Utför frågan
Det finns fyra viktiga metoder för att utföra frågan i Statement-gränssnittet. Dessa förklaras nedan:
- ResultSet executeQuery (sträng SQL)
- int executeUpdate (String sql)
- boolean execute (String sql)
- int () executeBatch ()
a) ResultSet executeQuery (sträng SQL)
Metoden executeQuery () i uttalandegränssnittet används för att utföra SQL-frågan och hämta värdena från DB. Det returnerar ResultSet-objektet. Normalt kommer vi att använda den här metoden för SELECT-frågan.
b) executeUpdate (String sql)
Metoden executeUpdate () används för att utföra värddefinierade frågor som INSERT, UPDATE, DELETE (DML-satser) eller DDL-satser som inte returnerar något. För det mesta kommer vi att använda den här metoden för att infoga och uppdatera.
c) exekvera (String sql)
Metoden execute () används för att utföra SQL-frågan. Det återvänder Sann om den kör SELECT-frågan. Och det återvänder falsk om den kör INSERT- eller UPDATE-frågan.
d) executeBatch ()
Den här metoden används för att utföra en grupp SQL-frågor till databasen och om alla frågor körs framgångsrikt returnerar den en uppsättning uppdateringsräkningar. Vi använder den här metoden för att infoga / uppdatera huvuddelen av posterna.
# 5) Hämta resultat
När vi kör frågorna med metoden executeQuery () sparas resultatet i ResultSet-objektet. Det returnerade ResultSet-objektet kommer aldrig att vara null även om det inte finns någon matchande post i tabellen. ResultSet-objekt används för att komma åt de data som hämtats från databasen.
ResultSet rs 1= statemnt1.executeQuery(QUERY));
Vi kan använda metoden executeQuery () för SELECT-frågan. När någon försöker köra infoga / uppdatera frågan, kommer den att kasta SQLExecption med meddelandet “ metoden executeQuery kan inte användas för uppdatering ”.
Ett ResultatSet-objekt pekar på den aktuella raden i resultatuppsättningen. För att itera informationen i ResultSet-objektet, ring nästa () -metod på en stund-slinga. Om det inte finns mer information att läsa kommer den att FALSE returnera.
ResultSet kan också användas för att uppdatera data i DB. Vi kan hämta data från ResultSet med hjälp av gettermetoder som getInt (), getString (), getDate (). Vi måste skicka kolumnindex eller kolumnnamn som parameter för att få värdena med hjälp av Getter-metoder.
Vi kommer att lära oss mer om ResultSet i nästa handledning.
# 6) Stäng anslutningen
Slutligen är vi klara med att manipulera data i DB. Nu kan vi stänga JDBC-anslutningen. Vi måste se till att vi har stängt resursen efter att vi har använt den. Om vi inte stänger dem ordentligt kan det hända att vi inte är anslutna.
När vi stänger anslutningsobjektet stängs Statement- och ResultSet-objekt automatiskt.
conn.close();
Från och med Java 7 kan vi stänga JDBC-anslutningarna automatiskt med ett försök-fångstblock. JDBC-anslutningen bör öppnas inom parentes till försöksblocket. Inuti försöksblocket kan du göra databasanslutningarna normalt som vi gör.
När körningen avslutas med försöksblocket stängs anslutningen automatiskt. I det här fallet behöver vi inte stänga anslutningen genom att ringa metoden connect.close i Java-programmet.
try(Connection conn = DriverManager.getConnection(url, user, password)) { //database connection and operation }
Java JDBC-anslutningsexempel
I det här exemplet ser du hur du implementerar de 6 grundläggande stegen för att ansluta till databasen med JDBC i Java-programmet.
Skapa bord
Innan det, skapa först en tabell och lägg till några poster i den.
Nedan finns SQL-frågan för att skapa en tabell.
create table employee_details (empNum number(10), lastName varchar(50), firstName varchar(50), email varchar(255) , deptNum number(10), salary number(10));
Skapade tabellen 'medarbetare_detaljer' i Oracle DB.
Infoga data i tabellen
Använd följande frågor för att infoga data i tabellen “medarbetare_detaljer”.
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);
Java-program
Ladda ner JDBC jar-filen och importera den till Java-projektet.
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(); } } }
Produktion:
Viktiga punkter att notera:
- Först måste vi importera de paket som vi kommer att använda i vårt Java-program för JDBC-anslutningen. Så vi kan använda klasserna, underklasserna och gränssnitten i paketen.
- Vi måste registrera eller ladda drivrutinen med DriverManager innan vi upprättar en anslutning.
- Efter att ha registrerat föraren kan vi upprätta anslutningen och utföra åtgärderna.
- Med hjälp av ett uttalandegränssnitt kan vi skapa och köra SQL-frågan. För en enkel SQL-fråga kan vi använda uttalandegränssnittet. För infoga / uppdatera / radera kan vi använda gränssnittet PreparedStatement.
- Efter uttalandets utförande sparas resultaten i ResultSet-objektet. Vi får resultaten från ResultSet-objektet med nästa () -metod för mer än 1 post.
- När vi är klara med databasåtgärden måste vi stänga anslutningen. Så att resursen blir tillgänglig för andra att använda.
Vanliga frågor
F # 1) Vilka är de grundläggande stegen för att ansluta till DB i Java?
Svar: Det finns sex grundläggande steg för att ansluta till DB i Java.
Dom är:
- Import-paket
- Lastförare
- Upprätta anslutning
- Skapa och exekvera uttalandet
- Hämta resultat
- Stäng anslutningen
F # 2) Vad är skillnaden mellan BLOB- och CLOB-datatyper i JDBC?
Svar:
KLICK används för att hålla den binära typen av data. Lagringsstorleken kan variera beroende på databaserna Exempel: bilder, röst, video.
CLOB används för att hålla teckentypen data. Liksom CLOB kan lagringsutrymmet variera beroende på DB. Exempel: filer.
F # 3) Vilken metod i DriverManager-klassen används för att upprätta en anslutning till DB?
Svar: DriverManager-klassen har en getConnection () -metod som används för att upprätta en anslutning med DB.
F # 4) Vad är skillnaden mellan Class.forName () och DriverManager.registerDriver ()?
Svar: Class.forName () - Först laddar den in drivrutinen i minnet och registrerar sedan rätt drivrutin hos Driver Manager. Då kommer det att skapa ett objekt för föraren att utföra JDBC-anslutningen. Det laddar föraren uttryckligen.
hur man öppnar en binär fil i Windows
DriverManager.registerDriver () - Det registrerar föraren implicit.
F # 5) Vad är en anslutningsläcka?
Svar: Denna situation inträffar när en anslutning öppnas och du inte stängde den. Om det finns ett kodblock som öppnar anslutningen och inte stänger anslutningen. När kodblocket körs kommer en anslutning att läcka ut från anslutningspoolen.
När alla tillgängliga anslutningar har läckt ut kommer ingen anslutning att finnas tillgänglig och applikationen hänger. Hur mycket det är viktigt att öppna anslutningen så mycket är det viktigt att stänga anslutningen.
F # 6) Är det obligatoriskt att stänga anslutningen?
Svar: Om du använder Java-versioner under 7 måste du stänga anslutningen manuellt.
Från versioner ovanför Java 7 kan vi stänga anslutningen automatiskt genom att öppna JDBC-anslutningskoden inom parentes för försöksblocket. När programmet avslutas med försöksblocket stängs anslutningen automatiskt.
Slutsats
I denna handledning har vi diskuterat hur man skapar en JDBC-anslutning. Nu kan du utföra DB-operationer med JDBC i Java-programmet. Vi undersökte de sex grundläggande stegen för att ansluta till databasen. Vi måste importera paketen i vårt Java-program för att kunna använda det.
När vi har registrerat föraren kan vi upprätta anslutningen. Vi kan skapa och köra SQL-uttalandet med ett uttalande-gränssnitt och hämta resultaten i ResultSet-objektet. Som det sista steget bör vi stänga anslutningen.
Rekommenderad läsning
- Java JDBC-handledning: Vad är JDBC (Java Database Connectivity)
- Java-gränssnitt och abstrakt klasshandledning med exempel
- Java JDBC-transaktionshantering med exempel
- JDBC DriverManager, JDBC PreparedStatement And Statement
- JDBC ResultSet: Hur man använder Java ResultSet för att hämta data
- JAVA-handledning för nybörjare: 100+ praktiska Java-videohandledning
- Introduktion till Java-programmeringsspråk - Videohandledning
- Selenium Database Testing (med WebDriver och JDBC API)