JDBC

W związku z popularnością języka Java w dziedzinie aplikacji bazodanowych zostały opracowane dwie wersje:

Szczególnie interfejs JDBC stał się popularny i jest używany między innymi w:

 

  

JDBC jest zbiorem klas i interfejsów w Javie, które umożliwiają dostęp do bazy danych z programów napisanych w Javie. Klasy te i interfejsy tworzą pakiet java.sql.  Aby użyć JDBC w programie należy dokonać importu:

import java.sql.*;

 

Sterownik JDBC - zestaw klas, które implementują interfejsy pakietu java.sql dla konkretnej bazy danych: 

 

Obiekty klas Connection, Statement i ResultSet:

//połącz się z bazą danych
Connection con = 
DriverManager.getConnection(url, "scott","tiger");
Statement stmt = con.createStatement();
String query = "SELECT Ename, Sal FROM Emp";
// zbuduj obiekt reprezentujący instrukcję SQL
ResultSet rs = stmt.executeQuery(query);
try { 
   // przejdź po wszystkich wierszach wynikowych
   while (rs.next()) {
      String s = rs.getString("Ename");
      Int n = rs.getFloat("Sal");
      System.out.println(s + ": " + n);
}
} catch(SQLException ex) {// obsłuż wyjątki
System.out.println(ex.getMessage ()
+ ex.getSQLState () + ex.getErrorCode ());
}

gdzie przykładowo  
url = "jdbc:oracle:thin:@xeon.pjwstk.waw.pl:1521:ORCL"

lub 
url="jdbc:odbc:mojaBD" (sterownik typu most między JDBC a ODBC). 

 

Modyfikowanie danych w bazie danych

Statement stm = con.createStatement();
int liczba = stm.executeUpdate(
                 "UPDATE Osoba SET Zarobki = Zarobki*1.1");
System.out.println(
     "Podniesiono zarobki o 10%: "+ liczba+" osobom.");
stm.close();

 

-- za pomocą obiektu ResultSet

Statement stm = con.CreateStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE)
String sql = "SELECT * FROM Osoba";
ResultSet rs = executeQuery(sql);
rs.first();
rs.updateString("Nazwisko","Kowalski");
rs.updateInt("Zarobki",10000);

rs.updateRow();

 

Usunięcie bieżącego rekordu:

rs.deleteRow();

 

Dodanie nowego rekordu:

rs.moveToInsertRow();
rs.updateString("Nazwisko","Kowalski");
rs.updateInt("Zarobki", 10000);
rs.insertRow();

 

Obsługa transakcji

Domyślnie każda instrukcja SQL kończy się automatycznym zatwierdzeniem (auto-commit). Poniżej zmieniamy to domyślne ustawienie:

try {
   con.setAutoCommit(false);
   Statement stm=con.createStatement();
   stm.executeUpdate(" .....");
   stm.executeUpdate(" .....");
   .....
   con.commit();
}
catch(Exception e){
   con.rollback();
}

Obsługa NULL - funkcja wasNull()

float zarobki = rs.getFloat("Zarobki");
if (rs.wasNull(){
   zarobki = 0;
}