java jdbc connection tutorial with programming example
Questo tutorial sulla connessione JDBC spiega i passaggi di base per un database con esempi e fornisce stringhe di connessione JDBC per diversi database:
cos'è il file swf come aprirlo
Nel precedente tutorial di Serie di tutorial JDBC , abbiamo appreso componenti, architettura e tipi di driver in JDBC (Java Database Connectivity).
In questo tutorial, discuteremo i passaggi per connettersi ai database utilizzando JDBC. Questo tutorial ti mostrerà come eseguire la connessione JDBC e come eseguire le operazioni del database. L'API JDBC funge da interfaccia tra il programma Java e il database.
Alla fine di questo tutorial, sarai in grado di scrivere programmi Java per collegarti ai database ed eseguire operazioni sul database.
Cosa imparerai:
Passaggi di connessione JDBC
Ci sono 6 passaggi di base per connettersi con JDBC. Sono arruolati nell'immagine sottostante:
# 1) Importa pacchetti
Innanzitutto, dobbiamo importare i pacchetti esistenti per utilizzarli nel nostro programma Java. L'importazione assicurerà che le classi API JDBC siano disponibili per il programma. Possiamo quindi utilizzare le classi e le sottoclassi dei pacchetti.
Indipendentemente dal driver JDBC, aggiungere la seguente istruzione di importazione nel programma Java.
import java.sql.*;
Importa le altre classi in base alla funzionalità che utilizzerai nel programma. Scarica i file Jar appropriati per il database che utilizzerai nel programma.
Fare riferimento a tutorial precedente per i collegamenti per scaricare i file Jar per il tuo database.
JDBC API 4.0 fornisce principalmente 2 pacchetti importanti:
- java.sql
- javax.sql
(i) pacchetto java.sql
Questo pacchetto fornisce classi e interfacce per eseguire la maggior parte delle funzioni JDBC come la creazione e l'esecuzione di query SQL.
Classi / Interfacce | Descrizione |
---|---|
DriverManager | Fornisce un servizio di base per gestire una serie di driver JDBC |
BLOB | Rappresenta il valore Blob SQL nel programma Java |
CallableStatement | Viene utilizzato per eseguire stored procedure SQL |
CLOB | Rappresenta il valore Clob SQL nel programma Java |
Connessione | Crea una connessione (sessione) con un database specifico |
Data | Fornisce supporto per il tipo Data SQL |
Driver | Crea un'istanza di un driver con Driver Manager |
ParameterMetaData | È un oggetto che può essere utilizzato per ottenere le informazioni sui tipi e le proprietà di ogni parametro in un Oggetto PreparedStatement |
Discorso preparato | Viene utilizzato per creare ed eseguire una query con parametri nel programma Java |
ResultSet | Viene utilizzato per accedere al risultato riga per riga |
ResultSetMetaData | Viene utilizzato per ottenere le informazioni sui tipi e le proprietà delle colonne in un oggetto ResultSet |
RowId | Rappresenta il valore SQL ROWID |
Savepoint | Rappresenta il punto di salvataggio nella transazione |
SQLData | Viene utilizzato per mappare l'UDT (User Defined Type) SQL a una classe nel programma Java |
SQLXML | Rappresenta il tipo XML SQL |
Dichiarazione | Viene utilizzato per eseguire un'istruzione SQL statica |
DriverPropertyInfo | Fornisce le proprietà del driver per effettuare una connessione |
SQLException | Fornisce informazioni sugli errori del database |
SQLTimeoutException | È una sottoclasse di SQLException generata quando il timeout specificato dall'istruzione è scaduto |
SQLWarning | È un'eccezione che fornisce informazioni sugli avvisi di accesso al database |
Struct | È una mappatura standard nel programma Java per il tipo strutturato SQL |
(ii) pacchetto javax.sql
È un'estensione dell'API JDBC e fornisce l'accesso e l'elaborazione dei dati lato server nel programma Java.
Classi / Interfacce | Descrizione |
---|---|
ConnectionEvent | Fornisce informazioni sul verificarsi di eventi relativi alla connessione |
CommonDataSource | È un'interfaccia che definisce i metodi comuni tra DataSource, XADataSource e ConnectionPoolDataSource |
ConnectionPoolDataSource | È una factory per oggetti PooledConnection |
Fonte di dati | È una fabbrica per le connessioni al DataSource fisico rappresentato dall'oggetto |
PooledConnection | Viene utilizzato per gestire il Connection Pool |
RowSet | Fornisce supporto all'API JDBC per il modello di componente dei bean Java |
RowSetMetadata | Contiene le informazioni sulle colonne in un oggetto RowSet |
ConnectionEventListener | Viene utilizzato per registrare gli eventi dell'oggetto PooledConnection |
RowSetEvent | Viene generato quando si verifica un evento in un oggetto Rowset |
StatementEvent | Viene inviato a tutti gli StatementEventListeners registrati con una PooledConnection generata |
# 2) Carica driver
Innanzitutto, dobbiamo caricare / registrare il driver nel programma prima di connetterci al database. È necessario registrarlo solo una volta per database nel programma.
Possiamo caricare il driver nei seguenti 2 modi:
- Class.forName ()
- DriverManager.registerDriver ()
(i) Class.forName ()
In questo modo, il file di classe del driver viene caricato nella memoria in fase di esecuzione. Carica implicitamente il driver. Durante il caricamento, il driver si registrerà automaticamente con JDBC.
Nome DB | Nome driver JDBC |
---|---|
Sybase | com.sybase.jdbcSybDriver |
MySQL | com.mysql.jdbc.Driver |
Oracolo | oracle.jdbc.driver.OracleDriver |
Microsoft SQL Server | com.microsoft.sqlserver.jdbc.SQLServerDriver |
Accesso MS | net.ucanaccess.jdbc.UcanaccessDriver |
PostgreSQL | org.postgresql.Driver |
IBM DB2 | com.ibm.db2.jdbc.net.DB2Driver |
TeraData | com.teradata.jdbc.TeraDriver |
Nota: Il metodo forName () è valido solo per macchine virtuali conformi a JDK.
(ii) DriverManager.registerDriver ()
DriverManager è una classe incorporata disponibile nel pacchetto java.sql. Funge da mediatore tra l'applicazione Java e il database a cui si desidera connettersi. Prima di connettersi al database, è necessario registrare il driver con DriverManager. La funzione principale di DriverManager è caricare la classe driver del Database e creare una connessione con DB.
Registro vuoto statico pubblico Driver (driver) - Questo metodo registrerà il driver con Driver Manager. Se il conducente è già registrato, non intraprenderà alcuna azione.
- Lancerà SQLException se si verifica l'errore del database.
- Lancerà NullPointerException se il driver è nullo.
DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver()) DriverManager.registerDriver(new com.microsoft.sqlserver.jdbc.SQLServerDriver())
In questo modo, puoi registrare il driver per il tuo database passandolo come parametro.
# 3) Stabilisci la connessione
Dopo aver caricato il driver, il passaggio successivo consiste nel creare e stabilire la connessione. Una volta richiesto, i pacchetti vengono importati e i driver vengono caricati e registrati, quindi possiamo stabilire una connessione al database.
La classe DriverManager ha il metodo getConnection, useremo questo metodo per ottenere la connessione con Database. Per chiamare il metodo getConnection (), dobbiamo passare 3 parametri. I 3 parametri sono URL del tipo di dati stringa, un nome utente e una password per accedere al database.
Il metodo getConnection () è un metodo sovraccarico. I 2 metodi sono:
- getConnection (URL, nome utente, password); - Ha 3 parametri URL, nome utente, password.
- getConnection (URL); - Ha un solo parametro. L'URL ha anche un nome utente e una password.
La tabella seguente elenca le stringhe di connessione JDBC per i diversi database:
Banca dati | Stringa di connessione / URL DB |
---|---|
Sybase | jdbc: Sybase: Tds: HOSTNAME: PORT / DATABASE_NAME |
MySQL | jdbc: mysql: // HOST_NAME: PORT / DATABASE_NAME |
Oracolo | jdbc: oracle: thin: @HOST_NAME: PORT: SERVICE_NAME |
Microsoft SQL Server | jdbc: sqlserver: // HOST_NAME: PORT; DatabaseName = |
Accesso MS | 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 |
Esempio:
Connection con = DriverManager.getConnection(jdbc:oracle:thin:@localhost:1521:xe,System,Pass123@)
Qui in questo esempio,
- magro si riferisce al tipo di driver.
- localhost è dove è in esecuzione il database Oracle.
- 1521 è il numero di porta per connettersi al DB.
- veicolo - SID
- Sistema - Nome utente per connettersi al database Oracle.
- Pass123 @ - Parola d'ordine
# 4) Crea ed esegui istruzione
Una volta stabilita la connessione, possiamo interagire con il database connesso. Innanzitutto, dobbiamo creare l'istruzione per eseguire la query SQL e quindi eseguire l'istruzione.
(i) Crea dichiarazione
Ora creeremo l'oggetto istruzione che esegue la query con il database connesso. Usiamo il metodo createStatement di Connessione class per creare la query.
Ci sono 3 interfacce di istruzioni disponibili nel pacchetto java.sql. Questi sono spiegati di seguito:
una dichiarazione
Questa interfaccia viene utilizzata per implementare semplici istruzioni SQL senza parametri. Restituisce l'oggetto ResultSet.
Statement statemnt1 = conn.createStatement();
b) Dichiarazione preparata
Questa interfaccia PreparedStatement estende l'interfaccia Statement. Quindi, ha più funzionalità rispetto all'interfaccia Statement. Viene utilizzato per implementare istruzioni SQL parametrizzate e precompilate. Le prestazioni dell'applicazione aumentano perché compila la query solo una volta.
È facile riutilizzare questa interfaccia con un nuovo parametro. Supporta il parametro IN. Anche noi possiamo usare questa dichiarazione senza alcun parametro.
String select_query = “Select * from states where state_id = 1”; PreparedStatement prpstmt = conn.prepareStatement(select_query);
c) CallableStatement
L'interfaccia CallableStatement estende l'interfaccia PreparedStatement. Quindi, ha più funzionalità rispetto all'interfaccia PreparedStatement. Viene utilizzato per implementare un'istruzione SQL parametrizzata che richiama procedure o funzioni nel database. Una procedura memorizzata funziona come un metodo o una funzione in una classe. Supporta i parametri IN e OUT.
L'istanza CallableStatement viene creata chiamando il metodo prepareCall dell'oggetto Connection.
CallableStatementcallStmt = con.prepareCall('{call procedures(?,?)}');
(ii) Eseguire la query
Esistono 4 metodi importanti per eseguire la query nell'interfaccia Statement. Questi sono spiegati di seguito:
- ResultSet executeQuery (String sql)
- int executeUpdate (String sql)
- boolean execute (String sql)
- int () executeBatch ()
a) ResultSet executeQuery (String sql)
Il metodo executeQuery () nell'interfaccia Statement viene utilizzato per eseguire la query SQL e recuperare i valori dal DB. Restituisce l'oggetto ResultSet. Normalmente, useremo questo metodo per la query SELECT.
b) executeUpdate (String sql)
Il metodo executeUpdate () viene utilizzato per eseguire query con valori specificati come INSERT, UPDATE, DELETE (istruzioni DML) o DDL che non restituiscono nulla. Principalmente, useremo questo metodo per l'inserimento e l'aggiornamento.
c) eseguire (String sql)
Il metodo execute () viene utilizzato per eseguire la query SQL. Ritorna vero se esegue la query SELECT. E ritorna falso se esegue la query INSERT o UPDATE.
d) executeBatch ()
Questo metodo viene utilizzato per eseguire un batch di query SQL al database e se tutte le query vengono eseguite correttamente, restituisce una matrice di conteggi di aggiornamento. Useremo questo metodo per inserire / aggiornare la maggior parte dei record.
copia l'array in un altro array java
# 5) Recupera i risultati
Quando eseguiamo le query utilizzando il metodo executeQuery (), il risultato verrà memorizzato nell'oggetto ResultSet. L'oggetto ResultSet restituito non sarà mai nullo anche se non sono presenti record corrispondenti nella tabella. L'oggetto ResultSet viene utilizzato per accedere ai dati recuperati dal database.
ResultSet rs 1= statemnt1.executeQuery(QUERY));
Possiamo usare il metodo executeQuery () per la query SELECT. Quando qualcuno cerca di eseguire la query di inserimento / aggiornamento, lancerà SQLExecption con il messaggio ' Il metodo executeQuery non può essere utilizzato per l'aggiornamento '.
Un oggetto ResultSet punta alla riga corrente nel Resultset. Per iterare i dati nell'oggetto ResultSet, chiamare il metodo next () in un ciclo while. Se non ci sono più record da leggere, restituirà FALSE.
Il ResultSet può essere utilizzato anche per aggiornare i dati nel DB. Possiamo ottenere i dati da ResultSet utilizzando metodi getter come getInt (), getString (), getDate (). È necessario passare l'indice o il nome della colonna come parametro per ottenere i valori utilizzando i metodi Getter.
Impareremo di più sul ResultSet nel prossimo tutorial.
# 6) Chiudi connessione
Infine, abbiamo finito con la manipolazione dei dati nel DB. Ora possiamo chiudere la connessione JDBC. Dobbiamo assicurarci di aver chiuso la risorsa dopo averla utilizzata. Se non li chiudiamo correttamente, potremmo perdere le connessioni.
Quando chiudiamo l'oggetto connessione, gli oggetti Statement e ResultSet verranno chiusi automaticamente.
conn.close();
Da Java 7 in poi, possiamo chiudere le connessioni JDBC automaticamente utilizzando un blocco try-catch. La connessione JDBC dovrebbe essere aperta tra parentesi del blocco try. All'interno del blocco try, puoi eseguire le connessioni al database normalmente come facciamo noi.
Una volta che l'esecuzione esce dal blocco try, chiuderà automaticamente la connessione. In questo caso, non è necessario chiudere la connessione chiamando il metodo conn.close nel programma Java.
try(Connection conn = DriverManager.getConnection(url, user, password)) { //database connection and operation }
Esempio di connessione JDBC Java
In questo esempio, vedrai come implementare i 6 passaggi di base per connettersi al database utilizzando JDBC nel programma Java.
Crea tabella
Prima di ciò, prima crea una tabella e aggiungi alcune voci al suo interno.
Di seguito è riportata la query SQL per creare una tabella.
create table employee_details (empNum number(10), lastName varchar(50), firstName varchar(50), email varchar(255) , deptNum number(10), salary number(10));
Creata la tabella 'Employee_details' in Oracle DB.
Inserisci dati nella tabella
Utilizzando le seguenti query, inserire i dati nella tabella '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);
Programma Java
Scarica il file jar JDBC e importalo nel progetto 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(); } } }
Produzione:
Punti chiave da notare:
- Innanzitutto, dobbiamo importare i pacchetti che utilizzeremo nel nostro programma Java per la connessione JDBC. Quindi possiamo usare le classi, le sottoclassi e le interfacce nei pacchetti.
- Dobbiamo registrare o caricare il driver con DriverManager prima di stabilire una connessione.
- Dopo aver registrato il driver, possiamo stabilire la connessione ed eseguire le operazioni.
- Utilizzando un'interfaccia di istruzioni possiamo creare ed eseguire la query SQL. Per una semplice query SQL, possiamo utilizzare l'interfaccia Statement. Per inserire / aggiornare / eliminare, possiamo utilizzare l'interfaccia PreparedStatement.
- Dopo l'esecuzione dell'istruzione, i risultati verranno archiviati nell'oggetto ResultSet. Otteniamo i risultati dall'oggetto ResultSet utilizzando il metodo next () per più di 1 record.
- Una volta terminate le operazioni sul database, è necessario chiudere la connessione. In modo che la risorsa sia disponibile per essere utilizzata da altri.
Domande frequenti
D # 1) Quali sono i passaggi fondamentali per connettersi al DB in Java?
Risposta: Ci sono 6 passaggi di base per connettersi al DB in Java.
Sono:
- Pacchetto di importazione
- Carica driver
- Stabilisci connessione
- Crea ed esegui l'istruzione
- Recupera i risultati
- Chiudi connessione
D # 2) Qual è la differenza tra i tipi di dati BLOB e CLOB in JDBC?
Risposta:
BLOB viene utilizzato per contenere il tipo di dati binario. La dimensione di archiviazione può variare in base ai database Esempio: immagini, voce, video.
CLOB viene utilizzato per contenere il tipo di carattere dei dati. Come CLOB, lo spazio di archiviazione può variare in base al DB. Esempio: File.
D # 3) Quale metodo della classe DriverManager viene utilizzato per stabilire una connessione con DB?
Risposta: La classe DriverManager ha un metodo getConnection () che viene utilizzato per stabilire una connessione con DB.
D # 4) Qual è la differenza tra Class.forName () e DriverManager.registerDriver ()?
Risposta: Class.forName () - Innanzitutto carica il driver nella memoria e quindi registra il driver appropriato con Driver Manager. Quindi creerà un oggetto del driver per eseguire la connessione JDBC. Caricherà il driver in modo esplicito.
DriverManager.registerDriver () - Registra il conducente in modo implicito.
Q # 5) Cos'è una perdita di connessione?
Risposta: Questa situazione si verifica quando viene aperta una connessione e non l'hai chiusa. Se è presente un blocco di codice, che apre la connessione e non chiude la connessione. Ogni volta che viene eseguito quel blocco di codice, una connessione verrà persa dal Connection Pool.
Una volta che tutte le connessioni disponibili sono trapelate, nessuna connessione sarà disponibile e l'applicazione si bloccherà. Quanto è importante aprire la connessione tanto è importante chiudere la connessione.
Q # 6) È obbligatorio chiudere la connessione?
Risposta: Se utilizzi versioni di Java precedenti alla 7, devi chiudere la connessione manualmente.
Dalle versioni precedenti a Java 7, possiamo chiudere la connessione automaticamente aprendo il codice di connessione JDBC tra parentesi del blocco try. Una volta che il programma esce dal blocco try, chiuderà automaticamente la connessione.
Conclusione
In questo tutorial, abbiamo discusso come stabilire una connessione JDBC. Ora è possibile eseguire operazioni DB utilizzando JDBC nel programma Java. Abbiamo esplorato i 6 passaggi fondamentali per connettersi con Database. Dobbiamo importare i pacchetti nel nostro programma Java per usarlo.
Una volta registrato il driver, possiamo stabilire la connessione. Possiamo creare ed eseguire l'istruzione SQL utilizzando un'interfaccia Statement e recuperare i risultati nell'oggetto ResultSet. Come ultimo passaggio, dovremmo chiudere la connessione.
Lettura consigliata
- Tutorial Java JDBC: cos'è JDBC (Java Database Connectivity)
- Tutorial sull'interfaccia Java e sulla classe astratta con esempi
- Gestione transazioni Java JDBC con esempio
- JDBC DriverManager, JDBC PreparedStatement e Statement
- ResultSet JDBC: come utilizzare il ResultSet Java per recuperare i dati
- Tutorial JAVA per principianti: oltre 100 tutorial video Java pratici
- Introduzione al linguaggio di programmazione Java - Tutorial video
- Test del database del selenio (utilizzando WebDriver e API JDBC)