java jdbc connection tutorial with programming example
Aquest tutorial de connexió JDBC explica els passos bàsics d'una base de dades amb exemples i proporciona cadenes de connexió JDBC per a diferents bases de dades:
millor programa per clonar un disc dur
A l 'anterior tutorial de Sèrie de tutorials JDBC , hem après components, arquitectura i tipus de controladors a Java Database Connectivity (JDBC).
En aquest tutorial, parlarem dels passos per connectar-vos amb bases de dades mitjançant JDBC. Aquest tutorial us mostrarà com fer la connexió JDBC i realitzar operacions de base de dades. L'API JDBC actua com una interfície entre el programa Java i la base de dades.
Al final d'aquest tutorial, podreu escriure programes Java per connectar-vos amb bases de dades i realitzar operacions de base de dades.
Què aprendreu:
Passos de connexió JDBC
Hi ha 6 passos bàsics per connectar amb JDBC. Es mostren a la imatge següent:
# 1) Importar paquets
En primer lloc, hem d’importar els paquets existents per utilitzar-lo al nostre programa Java. La importació s'assegurarà que les classes de l'API JDBC estiguin disponibles per al programa. A continuació, podem utilitzar les classes i subclasses dels paquets.
Independentment del controlador JDBC, afegiu la declaració d’importació següent al programa Java.
import java.sql.*;
Importeu les altres classes en funció de la funcionalitat que utilitzeu al programa. Descarregueu els fitxers Jar adequats per a la base de dades que utilitzeu al programa.
Consulteu el document tutorial anterior per als enllaços per descarregar els fitxers Jar de la vostra base de dades.
L'API JDBC 4.0 proporciona principalment 2 paquets importants:
- java.sql
- javax.sql
(i) paquet java.sql
Aquest paquet proporciona classes i interfícies per realitzar la majoria de funcions JDBC, com ara crear i executar consultes SQL.
Classes / Interfícies | Descripció |
---|---|
DriverManager | Proporciona un servei bàsic per gestionar un conjunt de controladors JDBC |
BLOB | Representa el valor de SQL Blob al programa Java |
CallableStatement | S'utilitza per executar procediments emmagatzemats SQL |
CLOB | Representa el valor de SQL Clob al programa Java |
Connexió | Crea una connexió (sessió) amb una base de dades específica |
Data | Proporciona suport per al tipus Date SQL |
Conductor | Crea una instància d'un controlador amb controlador de controladors |
ParameterMetaData | És un objecte que es pot utilitzar per obtenir informació sobre els tipus i propietats de cada paràmetre en un objecte PreparedStatement |
PreparedStatement | S'utilitza per crear i executar una consulta parametritzada al programa Java |
Resultat | S'utilitza per accedir al resultat fila per fila |
ResultSetMetaData | S'utilitza per obtenir informació sobre els tipus i les propietats de les columnes d'un objecte ResultSet |
RowId | Representa el valor SQL ROWID |
Savepoint | Representa savepoint en la transacció |
SQLData | S'utilitza per assignar el tipus definit per l'usuari SQL (UDT) a una classe del programa Java |
SQLXML | Representa el tipus SQL XML |
Declaració | S'utilitza per executar una sentència SQL estàtica |
DriverPropertyInfo | Proporciona propietats del controlador per establir una connexió |
SQLException | Proporciona informació sobre els errors de la base de dades |
SQLTimeoutException | És una subclasse de SQLException generada quan el temps d'espera especificat per la sentència ha caducat |
SQLWarning | És una excepció que proporciona informació sobre avisos d'accés a la base de dades |
Estruct | És un programa de mapatge estàndard en Java per a tipus estructurat SQL |
(ii) paquet javax.sql
És una API d’extensió JDBC i proporciona accés i processament de dades del servidor al programa Java.
Classes / Interfícies | Descripció |
---|---|
ConnectionEvent | Proporciona informació sobre l’aparició d’esdeveniments relacionats amb la connexió |
CommonDataSource | És una interfície que defineix els mètodes habituals entre DataSource, XADataSource i ConnectionPoolDataSource |
ConnectionPoolDataSource | És una fàbrica d'objectes PooledConnection |
Font de dades | És una fàbrica de connexions amb el DataSource físic que representa l'objecte |
PooledConnection | S'utilitza per gestionar l'agrupació de connexions |
RowSet | Proporciona suport a l'API JDBC per al model de components de Java beans |
RowSetMetadata | Té la informació sobre les columnes d’un objecte RowSet |
ConnectionEventListener | S'utilitza per registrar esdeveniments d'objectes PooledConnection |
RowSetEvent | Es genera quan es produeix un esdeveniment a un objecte Rowset |
StatementEvent | S’envia a tots els StatementEventListeners registrats amb una PooledConnection generada |
# 2) Carregueu el controlador
En primer lloc, hauríem de carregar / registrar el controlador al programa abans de connectar-nos a la base de dades. Cal registrar-lo només una vegada per base de dades al programa.
Podem carregar el controlador de les dues maneres següents:
- Class.forName ()
- DriverManager.registerDriver ()
(i) Class.forName ()
D’aquesta manera, el fitxer de classe del controlador es carrega a la memòria en temps d’execució. Carrega implícitament el controlador. Mentre es carrega, el controlador es registrarà automàticament a JDBC.
Nom de la base de dades | Nom del controlador JDBC |
---|---|
Sybase | com.sybase.jdbcSybDriver |
MySQL | com.mysql.jdbc.Driver |
Oracle | 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 |
Nota: el mètode forName () només és vàlid per a màquines virtuals compatibles amb JDK.
(ii) DriverManager.registerDriver ()
DriverManager és una classe integrada que està disponible al paquet java.sql. Actua com a mediador entre l'aplicació Java i la base de dades que voleu connectar. Abans de connectar-vos amb la base de dades, heu de registrar el controlador amb DriverManager. La funció principal de DriverManager és carregar la classe de controladors de la base de dades i crear una connexió amb DB.
Registre públic de buits estàtics Conductor (controlador) - Aquest mètode registrarà el controlador al controlador de controladors. Si el conductor ja està registrat, no prendrà cap mesura.
- Es llançarà SQLException si es produeix l’error de la base de dades.
- Es llançarà NullPointerException si el conductor és nul.
DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver()) DriverManager.registerDriver(new com.microsoft.sqlserver.jdbc.SQLServerDriver())
Així, podeu registrar el controlador de la vostra base de dades passant-lo com a paràmetre.
# 3) Establir connexió
Després de carregar el controlador, el següent pas és crear i establir la connexió. Un cop requerits, s’importen els paquets i es carreguen i es registren els controladors, i podem establir una connexió a la base de dades.
La classe DriverManager té el mètode getConnection, utilitzarem aquest mètode per obtenir la connexió amb la base de dades. Per trucar al mètode getConnection (), hem de passar 3 paràmetres. Els 3 paràmetres són el tipus de dades de cadena URL, un nom d'usuari i una contrasenya per accedir a la base de dades.
El mètode getConnection () és un mètode sobrecarregat. Els 2 mètodes són:
- getConnection (URL, nom d'usuari, contrasenya); - Té 3 paràmetres URL, nom d'usuari, contrasenya.
- getConnection (URL); - Només té un paràmetre. L'URL també té un nom d'usuari i una contrasenya.
A la taula següent es mostren les cadenes de connexió JDBC per a les diferents bases de dades:
Base de dades | Cadena de connexió / URL de base de dades |
---|---|
Sybase | jdbc: Sybase: Tds: HOSTNAME: PORT / DATABASE_NAME |
MySQL | jdbc: mysql: // HOST_NAME: PORT / DATABASE_NAME |
Oracle | 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 |
Exemple:
Connection con = DriverManager.getConnection(jdbc:oracle:thin:@localhost:1521:xe,System,Pass123@)
Aquí en aquest exemple,
- prim fa referència al tipus de controlador.
- localhost és on s’executa la base de dades Oracle.
- 1521 és el número de port per connectar-se a la base de dades.
- vehicle - SID
- Sistema - Nom d'usuari per connectar-se a la base de dades Oracle.
- Pass123 @ - Contrasenya
# 4) Creació i execució de la declaració
Un cop establerta la connexió, podem interactuar amb la base de dades connectada. En primer lloc, hem de crear la sentència per realitzar la consulta SQL i després executar la sentència.
(i) Crea una declaració
Ara crearem l'objecte declaració que executa la consulta amb la base de dades connectada. Utilitzem el mètode createStatement del fitxer Connexió classe per crear la consulta.
Hi ha 3 interfícies de declaració disponibles al paquet java.sql. A continuació, s’expliquen:
una declaració
Aquesta interfície s'utilitza per implementar sentències SQL senzilles sense paràmetres. Torna l'objecte ResultSet.
Statement statemnt1 = conn.createStatement();
b) PreparedStatement
Aquesta interfície PreparedStatement amplia la interfície Statement. Per tant, té més funcions que la interfície Statement. S'utilitza per implementar sentències SQL parametritzades i precompilades. El rendiment de l’aplicació augmenta perquè només compila la consulta una vegada.
És fàcil reutilitzar aquesta interfície amb un paràmetre nou. Admet el paràmetre IN. Fins i tot podem utilitzar aquesta afirmació sense cap paràmetre.
String select_query = “Select * from states where state_id = 1”; PreparedStatement prpstmt = conn.prepareStatement(select_query);
c) CallableStatement
La interfície CallableStatement amplia la interfície PreparedStatement. Per tant, té més funcions que la interfície PreparedStatement. S'utilitza per implementar una sentència SQL parametritzada que invoca un procediment o una funció a la base de dades. Un procediment emmagatzemat funciona com un mètode o una funció en una classe. Admet els paràmetres IN i OUT.
La instància CallableStatement es crea trucant al mètode prepareCall de l'objecte Connection.
CallableStatementcallStmt = con.prepareCall('{call procedures(?,?)}');
(ii) Executeu la consulta
Hi ha 4 mètodes importants per executar la consulta a la interfície Statement. A continuació, s’expliquen:
- ResultSet executeQuery (cadena sql)
- int executeUpdate (cadena sql)
- execució booleana (String sql)
- int () executeBatch ()
a) ResultSet executeQuery (Cadena sql)
El mètode executeQuery () a la interfície Statement s'utilitza per executar la consulta SQL i recuperar els valors de la base de dades. Torna l'objecte ResultSet. Normalment, utilitzarem aquest mètode per a la consulta SELECT.
b) executeUpdate (cadena sql)
El mètode executeUpdate () s'utilitza per executar consultes de valor especificat com INSERT, UPDATE, DELETE (sentències DML) o sentències DDL que no retornen res. Sobretot utilitzarem aquest mètode per inserir i actualitzar.
c) executar (String sql)
El mètode execute () s’utilitza per executar la consulta SQL. Torna cert si executa la consulta SELECT. I, torna fals si executa la consulta INSERT o UPDATE.
d) executeBatch ()
Aquest mètode s’utilitza per executar un lot de consultes SQL a la base de dades i, si totes les consultes s’executen amb èxit, retorna una sèrie de recomptes d’actualitzacions. Utilitzarem aquest mètode per inserir / actualitzar la major part dels registres.
# 5) Recupereu resultats
Quan executem les consultes mitjançant el mètode executeQuery (), el resultat s’emmagatzemarà a l’objecte ResultSet. L'objecte ResultSet retornat mai serà nul, encara que no hi hagi cap registre coincident a la taula. L'objecte ResultSet s'utilitza per accedir a les dades recuperades de la base de dades.
ResultSet rs 1= statemnt1.executeQuery(QUERY));
Podem utilitzar el mètode executeQuery () per a la consulta SELECT. Quan algú intenti executar la consulta d'inserció / actualització, llançarà SQLExecption amb el missatge ' El mètode executeQuery no es pot utilitzar per actualitzar '.
Un objecte ResultSet apunta a la fila actual del conjunt de resultats. Per iterar les dades de l'objecte ResultSet, truqueu al mètode next () en un bucle while. Si no hi ha més registre per llegir, tornarà FALS.
ResultSet també es pot utilitzar per actualitzar dades a la base de dades. Podem obtenir les dades de ResultSet mitjançant mètodes getter com getInt (), getString (), getDate (). Hem de passar l’índex de columna o el nom de la columna com a paràmetre per obtenir els valors mitjançant mètodes Getter.
Coneixerem més sobre ResultSet al proper tutorial.
# 6) Tanca la connexió
Finalment, hem acabat amb la manipulació de dades a la base de dades. Ara podem tancar la connexió JDBC. Hem d’assegurar-nos que hem tancat el recurs després d’haver-lo utilitzat. Si no els tanquem correctament, podem acabar sense connexions.
Quan tanquem l'objecte de connexió, els objectes Statement i ResultSet es tancaran automàticament.
conn.close();
A partir de Java 7, podem tancar les connexions JDBC automàticament mitjançant un bloc try-catch. La connexió JDBC s'hauria d'obrir entre parèntesi del bloc try. Dins del bloc try, podeu fer les connexions de base de dades normalment com fem nosaltres.
Quan l'execució surti del bloc de prova, es tancarà automàticament la connexió. En aquest cas, no cal que tanquem la connexió trucant al mètode conn.close del programa Java.
try(Connection conn = DriverManager.getConnection(url, user, password)) { //database connection and operation }
Exemple de connexió Java JDBC
En aquest exemple, veureu com implementar els 6 passos bàsics per connectar-vos amb la base de dades mitjançant el programa JDBC al Java.
Crea una taula
Abans, primer, creeu una taula i afegiu-hi algunes entrades.
A continuació es mostra la consulta SQL per crear una taula.
create table employee_details (empNum number(10), lastName varchar(50), firstName varchar(50), email varchar(255) , deptNum number(10), salary number(10));
S'ha creat la taula 'empleats_detalls' a Oracle DB.
Inseriu dades a la taula
Mitjançant les consultes següents, inseriu les dades a la taula 'detalls_empleat'.
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);
Programa Java
Baixeu-vos el fitxer jar JDBC i importeu-lo al projecte 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(); } } }
Sortida:
Punts clau que cal tenir en compte:
- Primer, hem d’importar els paquets que farem servir al nostre programa Java per a la connexió JDBC. Per tant, podem utilitzar les classes, les subclasses i les interfícies dels paquets.
- Abans d’establir una connexió, hem de registrar o carregar el controlador amb DriverManager.
- Després de registrar el controlador, podem establir la connexió i realitzar les operacions.
- Mitjançant una interfície d’instruccions podem crear i executar la consulta SQL. Per a una consulta SQL senzilla, podem utilitzar la interfície Statement. Per inserir / actualitzar / eliminar, podem utilitzar la interfície PreparedStatement.
- Després de l'execució de la sentència, els resultats s'emmagatzemaran a l'objecte ResultSet. Obtenim els resultats de l’objecte ResultSet mitjançant el mètode next () per a més d’un registre.
- Un cop hàgim acabat l’operació de la base de dades, hem de tancar la connexió. De manera que el recurs estarà disponible per a la utilització d'altres.
Preguntes freqüents
P # 1) Quins són els passos fonamentals per connectar-se a la base de dades a Java?
Resposta: Hi ha 6 passos bàsics per connectar-se a la base de dades a Java.
Ells són:
- Paquet d'importació
- Controlador de càrrega
- Establir connexió
- Creeu i executeu la sentència
- Recupereu resultats
- Tanca la connexió
Q # 2) Quina diferència hi ha entre els tipus de dades BLOB i CLOB a JDBC?
Resposta:
BLOB s'utilitza per contenir el tipus binari de dades. La mida de l’emmagatzematge pot variar en funció de les bases de dades Exemple: imatges, veu, vídeo.
CLOB s'utilitza per contenir el tipus de caràcter de dades. Igual que CLOB, l’espai d’emmagatzematge pot variar en funció de la base de dades. Exemple: Fitxers.
P # 3) Quin mètode de la classe DriverManager s'utilitza per establir una connexió amb DB?
Resposta: La classe DriverManager té un mètode getConnection () que s’utilitza per establir una connexió amb DB.
Q # 4) Quina diferència hi ha entre Class.forName () i DriverManager.registerDriver ()?
Resposta: Class.forName () - Primer carrega el controlador a la memòria i, a continuació, registra el controlador adequat amb el Gestor de controladors. A continuació, crearà un objecte del controlador per realitzar la connexió JDBC. Carregarà explícitament el controlador.
què és la prova beta i com s’utilitza
DriverManager.registerDriver () - Registra el controlador implícitament.
P # 5) Què és una fuita de connexió?
Resposta: Aquesta situació es produeix quan s’obre una connexió i no la vau tancar. Si hi ha un bloc de codi, que obre la connexió i no la tanca. Sempre que s’executa aquest bloc de codi, sortirà una connexió del grup de connexions.
Un cop filtrades totes les connexions disponibles, no hi haurà cap connexió disponible i l’aplicació quedarà penjada. Quant és important obrir la connexió, tant és important tancar la connexió.
P # 6) És obligatori tancar la connexió?
Resposta: Si feu servir versions de Java inferiors a la 7, heu de tancar la connexió manualment.
Des de versions superiors a Java 7, podem tancar la connexió automàticament obrint el codi de connexió JDBC entre parèntesi del bloc try. Un cop el programa surti del bloc de prova, es tancarà la connexió automàticament.
Conclusió
En aquest tutorial, hem comentat com establir una connexió JDBC. Ara podeu realitzar operacions de base de dades mitjançant JDBC al programa Java. Hem explorat els 6 passos bàsics per connectar-nos amb Database. Hem d’importar els paquets del nostre programa Java per utilitzar-lo.
Un cop registrat el controlador, podem establir la connexió. Podem crear i executar la sentència SQL mitjançant una interfície Sentència i recuperar els resultats a l’objecte ResultSet. Com a darrer pas, hauríem de tancar la connexió.
Lectura recomanada
- Tutorial Java JDBC: què és JDBC (connectivitat a la base de dades Java)
- Interfície Java i tutoria de classes abstractes amb exemples
- Gestió de transaccions Java JDBC amb exemple
- JDBC DriverManager, JDBC PreparedStatement i declaració
- JDBC ResultSet: Com utilitzar Java ResultSet per recuperar dades
- Tutorial JAVA per a principiants: més de 100 tutorials pràctics de vídeo Java
- Introducció al llenguatge de programació Java: vídeo tutorial
- Proves de base de dades de seleni (mitjançant WebDriver i l'API JDBC)