Typy sterowników Program napisany w języku Java Rozdział JDBC JDBC API Menadżer sterowników JDBC Typ Typ Typ Typ Wprowadzanie do JDBC, kursory zwykłe, kursory przewijane, obsługa błędów, przetwarzanie transakcyjne, wywoływanie kodu składowanego JDBC - ODBC ODBC Biblioteka DB Opr. pośrednie SZBD Historia Podstawowe kroki aplikacji JDBC. JDK., rok 997, JDBC. JDK., rok 999, JDBC.0 JDK., rok 00, JDBC.0 Java SE 6, rok 006,. dołączenie do źródła danych. określenie parametrów połączenia. przygotowanie i wykonanie polecenia. pobranie wyników 5. odłączenie od źródła danych JDBC. Java SE 7, rok 0, JDBC. Java SE 8.
Nawiązywanie i zamykanie połączeń Wykonywanie zapytań Statement stmt = con.createstatement() ; import java.sql.*; Class.forName("oracle.jdbc.driver.OracleDriver"); Connection con = DriverManager.getConnection( "jdbc:oracle:thin:@dblab.cs.put.poznan.pl:5:dblabg", "scott", "tiger"); "SELECT nazwisko,placa_pod FROM pracownicy"); String nazwisko=rs.getstring("nazwisko"); float placa=rs.getfloat(); System.out.println(nazwisko+" "+placa); con.close(); 5 6 Wykonywanie aktualizacji danych Zarządzanie transakcjami () Statement stmt = con.createstatement() ; int changes; "INSERT INTO pracownicy(id_prac,nazwisko)"+ "VALUES(00,'Zieliński')"); System.out.println("Wstawiono "+changes+" krotek."); "UPDATE pracownicy " + "SET placa_pod=placa_pod*.5"); System.out.println("Zmodyfikowano "+changes+" krotek."); "DELETE FROM pracownicy WHERE id_prac=00"); System.out.println("Usunięto "+changes+" krotek."); private static int ilepracownikow(connection con) throws SQLException { int result; Statement stmt=con.createstatement(); "SELECT COUNT(*) FROM pracownicy"); rs.next(); result=rs.getint(); return result; 7 8
Zarządzanie transakcjami () Prekompilowane polecenia () con.setautocommit(false); Statement stmt=con.createstatement(); System.out.println(ilePracownikow(con)); // "DELETE FROM pracownicy WHERE id_prac=50"); System.out.println("Usunieto "+changes+" krotek."); con.rollback(); System.out.println(ilePracownikow(con)); // "SELECT nazwisko FROM pracownicy WHERE id_prac=?"); ResultSet rs; stmt.setint(,0); rs=stmt.executequery(); System.out.println(rs.getString("NAZWISKO")); "DELETE FROM pracownicy WHERE id_prac=50"); System.out.println("Usunieto "+changes+" krotek."); con.commit(); System.out.println(ilePracownikow(con)); // stmt.setint(,70); rs=stmt.executequery(); System.out.println(rs.getString("NAZWISKO")); 9 0 Prekompilowane polecenia () Aktualizowanie wsadowe () "UPDATE pracownicy SET placa_pod=?, etat =? WHERE id_prac=?"); "UPDATE pracownicy SET placa_pod=placa_pod *? WHERE id_prac =? "); stmt.setfloat(,000); stmt.setstring(,"profesor"); stmt.setint(,0); int changes =stmt.executeupdate(); System.out.println("Zmodyfikowano "+changes+ " krotek"); stmt.setfloat(,new Float(0.9)); stmt.setint(,0); stmt.addbatch(); stmt.setfloat(,new Float(.5)); stmt.setint(,50); stmt.addbatch(); int []changes =stmt.executebatch(); System.out.println("Zmodyfikowano"+changes[0]+", " +changes[]+" krotek");
Aktualizowanie wsadowe () Zwiększanie przesyłanej liczby krotek Statement stmt = con.createstatement(); stmt.addbatch("update pracownicy set placa_pod=000" + "where nazwisko = 'MORZY'"); stmt.addbatch("delete from pracownicy where " + "nazwisko = 'HAPKE'"); Statement stmt = con.createstatement(); ((OracleStatement)stmt).setRowPrefetch(0); "SELECT nazwisko FROM pracownicy"); while (rs.next()) System.out.println(rs.getString()); int []changes =stmt.executebatch(); Przewijalne zbiory wyników Modyfikowalne zbiory wyników Statement stmt = con.createstatement( ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_READ_ONLY); ResultSet rs = stmt.executequery( "SELECT nazwisko FROM pracownicy"); rs.absolute(); System.out.println(rs.getString()); rs.absolute(-); System.out.println(rs.getString()); rs.relative(-); System.out.println(rs.getString()); rs.relative(); System.out.println(rs.getString()); rs.afterlast(); while(rs.previous())system.out.println(rs.getstring()); Statement stmt = con.createstatement( ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE); ResultSet rs = stmt.executequery( "SELECT id_prac,nazwisko,placa_pod FROM pracownicy"); rs.last(); rs.updatestring(,rs.getstring()+""); rs.updatefloat("placa_pod", new Float(rs.getFloat()*0.9)); rs.updaterow();// albo rs.cancelrowupdates(); rs.movetoinsertrow(); rs.updateint(,0); rs.updatestring(,"zieliński"); rs.updatefloat(,new Float(.5)); rs.insertrow(); 5 6
Wyjątki Procedury składowane Statement stmt; try { stmt=con.createstatement(); stmt.executeupdate( "DELETE FROM pracownicy WHERE nazwisko='weglarz'"); catch (SQLException e) { System.out.println("Stan SQL: "+e.getsqlstate()); System.out.println("Kod błędu: "+e.geterrorcode()); System.out.println("Komunikat: "+e.getmessage()); CallableStatement stmt = con.preparecall( "{call WstawZespol(?,?,?)"); stmt.setint(,60); stmt.setstring(, "NOWY ZESPÓŁ"); stmt.setstring(, "PIOTROWO A"); stmt.execute(); 7 8 Funkcje składowane CallableStatement stmt = con.preparecall( "{? = call PoliczPracownikow(?)"); 5 6 stmt.setstring(, "ALGORYTMY"); stmt.registeroutparameter(,types.integer); stmt.execute(); int vliczbapracownikow = stmt.getint(); 9