Documente Academic
Documente Profesional
Documente Cultură
JDBC (Java DataBase Connectivity) este o parte a Java API dedicată conectării la
baze de date. Utilizând JDBC, se pot executa instrucţiuni SQL pentru orice bază de date
relaţională.
Etapele principale într-o aplicaţie ce foloseşte JDBC sunt următoarele:
- realizarea unei conexiuni cu baza de date;
- crearea unui "obiect instrucţiune" prin care se transmit instrucţiuni SQL către
gestionarul bazei de date;
- regăsirea rezultatelor.
Un driver JDBC este înregistrat automat de managerul de drivere atunci când clasa
driver este încărcată dinamic.
Încărcarea driverului punte JDBC-ODBC se realizează prin:
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
Un URL (eng. Uniform Resource Locator) JDBC este un mod de a identifica o bază
de date astfel încât driverul corespunzător să o recunoască şi să stabilească o legătură cu
aceasta.
Sintaxa standard pentru URL-urile JDBC este:
jdbc:<subprotocol>:<nume>, unde:
O dată ce s-a stabilit o conexiune, aceasta este folosită pentru a trimite instrucţiuni
SQL unei baze de date.
În acest scop, JDBC conţine următoarele clase ale căror instanţe se creează prin apelul
unei metode speciale din clasa Connection:
Statement. Un obiect Statement este utilizat pentru a trimite instrucţiuni SQL
simple. Acest obiect este creat de metoda createStatement().
PreparedStatement. Un obiect PreparedStatement reprezintă o instrucţiune
SQL precompilată. Acest obiect poate fi utilizat pentru a executa aceeaşi
instrucţiuni de mai multe ori. El este creat de metoda prepareStatement().
CallableStatement. Un obiect CallableStatement este utilizat pentru a executa
proceduri stocate SQL. Acest obiect este creat de metoda prepareCall().
Metodele de setare:
public void setTip(int i, tip t) throws SQLException
setează parametrul cu numărul de ordine i, cu precizarea că numerotarea începe cu 1. Driver-
ul îl converteşte la o valoare de tipul tipSQL şi îl trimite bazei de date. Iată câteva cazuri
particulare:
PROCESAREA REZULTATELOR
MetaData
Un obiect MetaData conţine informaţii despre baza de date sau capacităţile sale care
sunt disponibile datorită API-ului JDBC.
ResultSetMetaData
ParameterMetaData
Exemplul 1:
import java.sql.*; // imports the JDBC core package
public class JDBCDemo{
public static void main(String args[]){
int nota;
String nume, prenume;
// SQL Query string
String query = "SELECT * FROM Detalii";
try {
// load the JDBC driver
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
}
catch(java.lang.ClassNotFoundException e) {
System.err.print("ClassNotFoundException: ");
System.err.println(e.getMessage());
}
try{
// get a connection
Connection con =
DriverManager.getConnection ("jdbc:odbc:DB");
Exemplul 2: PreparedStatement
import java.sql.*;
public class PreparedStmt{
public static void main(String args[]){
String nume;
Integer[] note={5,10};
String query = ("SELECT * FROM Detalii WHERE nota = ?");
try {
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
}
catch(java.lang.ClassNotFoundException e) {
System.err.print("ClassNotFoundException: ");
System.err.println(e.getMessage());
}
try{
Connection con =
DriverManager.getConnection ("jdbc:odbc:DB");
PreparedStatement pstmt = con.prepareStatement(query);
for (int i=0; i<2;i++){
pstmt.setInt(1, note[i]);
ResultSet rs = pstmt.executeQuery();
System.out.println(note[i]);
while (rs.next()) {
nume = rs.getString("Nume")+" "+rs.getString("Prenume");
System.out.println(nume);
}
}
pstmt.close();
con.close();
}
catch(SQLException e){
e.printStackTrace();
}
}
}
try{
Connection con = DriverManager.getConnection ("jdbc:odbc:DB");
// get a connection
Statement stmt = con.createStatement(
ResultSet.TYPE_SCROLL_INSENSITIVE,
ResultSet.CONCUR_READ_ONLY);
ResultSet rs = stmt.executeQuery(query);
rs.afterLast(); //cursor after last line of the table
// parse the results in reverse order
while (rs.previous()) {
nume = rs.getString("Nume");
prenume = rs.getString("Prenume");
nota = rs.getInt("Nota");
System.out.println(nume+ " "+ prenume+" "+nota);
}
stmt.close();
con.close();
}
catch(SQLException e){
e.printStackTrace();
}
}
}
try{
Connection con = DriverManager.getConnection ("jdbc:odbc:DB");
// get a connection
Statement stmt = con.createStatement(
ResultSet.TYPE_SCROLL_INSENSITIVE,
ResultSet.CONCUR_UPDATABLE);
ResultSet rs = stmt.executeQuery(query);
ResultSetMetaData md = rs.getMetaData();
if(rs.getConcurrency()==ResultSet.CONCUR_UPDATABLE)
System.out.println("UPDATABLE");
else
System.out.println("READ_ONLY");
int nColumns = md.getColumnCount();
System.out.println("Tabelul Detalii are " + nColumns + "
coloane");
System.out.println("Acestea sunt:");
for(int i=1;i<=nColumns;i++){
System.out.print(md.getColumnLabel(i)+" ");
}
System.out.println();
while (rs.next()) {
rs.updateInt("Nota", 7);
rs.updateRow();
for(int i=1;i<=nColumns;i++){
System.out.print(rs.getString(i)+" ");
}
System.out.println();
}
}
catch(SQLException e){
e.printStackTrace();
}
}
}
Observaţii:
Pentru mai multe informaţii despre JDBC şi MySQL a se vedea:
http://www.developer.com/java/data/article.php/3417381/Using-JDBC-with-MySQL-
Getting-Started.htm
De studiat:
Tranzacţii şi instrucţiuni grupate (eng. batch)
Aplicaţii:
Încercaţi realizarea unei conexiuni:
la o bază de date MySQL
la o bază de date Oracle