You are on page 1of 20

Java i bazy danych

Programowanie z wykorzystaniem JDBC

mgr in . Piotr Kopniak

Omawiane zagadnienia
Wst p do technologii baz danych Sposoby po czenia z baz danych Sterowniki JDBC Po czenie z baz danych poprzez JDBC J zyk SQL (Structured Query Language) Praca z baz danych poprzez JDBC Jak stworzy prost aplikacj pracuj c z baz danych w Javie

Bazy danych I
Baza danych - zbir danych zorganizowany logicznie w postaci tabel. Ka da tabela sk ada si z kolumn r nych typw wierszy (krotek, rekordw). System zarz dzania baz danych (w skrcie SZBD lub DBMS) - oprogramowanie zarz dzaj ce danymi zarz dzaj ce fizycznie danymi w bazie danych. Warstwa daj ca u ytkownikowi (programi cie) mo liwo logicznego manipulowania danymi.

Bazy danych II
Relacyjna baza danych - zbir danych powi zanych ze sob relacjami zapewniaj cymi spjno danych. Relacja jest to zwi zek dwch rekordw w tej samej tabeli lub r nych tabelach powi zanych logicznie, np. jeden wiersz z tabeli Faktura zwi zany jest z kilkoma wierszami z tabeli Pozycje faktur. Obiektowa baza danych - baza przechowuj ca obiekty, tzn. nie tylko dane ale tak e funkcje na nich operuj ce, czyli obiekt. Fizyczna budowa - plik lub zbir plikw na jednym lub wielu woluminach. Plik mo e zawiera ca baz danych lub odpowiada jednej tabeli. Baza posiada tak e pliki specjalnego przeznaczenia, np. pliki przechowuj ce indeksy i pliki logowania transakcji.

Po aczenie z baz danych


Aplikacja klienta - program z ktrego korzysta u ytkownik. Dostarcza interfejs do wprowadzania i prezentacji danych. Sterownik - program t umacz cy instrukcje wstawiania i pobierania danych np.. w j zyku SQL na wywo ania funkcji API SZBD SZBD - program zarz dzaj cy fizycznymi danymi zgromadzonymi w bazie danych BD - baza danych lub zestaw rozproszony baz danych Aplikacja zdalna - aplikacja pracuj ca na serwerze WWW (wykonana jako servlet lub strona jsp) lub komponent umieszczony na serwerze aplikacji komunikuj cy si z baz danych i przesy aj cy cz sto dodatkowo przeliczone lub przefiltrowane dane do klienta
Aplikacja klienta Stero wnik

Sie
Aplikacja zdalna Stero wnik

Sie SZB D BD BD

BD

Po aczenie z baz danych w Javie


Sterownik JDBC (Java Database Connectivity) - zestaw klas najcz ciej w pliku *.jar dystrybuowany przez producentw SZBD lub firmy trzecie Servlet - aplikacja dzia aj ca w kontenerze serwera WWW np. Tomcat lub JServ. Po pierwszym odwo aniu utworzona instancja przechowuje informacje o swoim stanie i stanie po cze sieciowych sesjach. Wielow tkowo obs uguje wielu u ytkownikw. JSP - dynamiczna strona internetowa, wymieszany kod HTML i Javy. W momencie pierwszego odwo ania klienta jest kompilowana do servletu, ktry przejmuje obs ug dania.
Aplikacja, aplet, napisany w Javie Sterownik JDBC

Sie
Aplikacja JSP lub Servlet Sterownik JDBC

Sie SZBD

ODBC

BD BD

BD

Sterowniki JDBC
Generacja 1 JDBC - ODBC Bridge Driver ODBC (Open Dartabase Connectivity) Sterownik korzystaj cy z dost pnych sterownikw ODBC - wymaga jego instalacji Generacja 2 Native - API Partly - Java Driver sterownik napisany w j zyku JAVA korzystaj cy z funkcji napisanych w innych j zyka np.. w C Generacja 3 NET - Protocol All - Java Driver sterownik korzystaj c z protoko w sieciowych i gniazd bezpo rednio czy si z komponentem po rednim na serwerze nie wymaga dodatkowych instalacji umo liwia korzystanie z r norakich baz danych Generacja 4 Native - Protocol All - Java Driver po czenie za pomoc sieci i gniazd z silnikiem bazy danych

industry.java.sun.com/products/jdbc/drivers (obecnie 221)

Wybrane klasy i interfejsy JDBC I


java.sql.Driver interfejs odpowiedzialny za po czenie z baz danych t umaczy zapytania SQL-a na instrukcje dla bazy danych java.sql.DriverManager klasa zarz dzaj ca list dost pnych sterownikw i udost pniaj ca wymagany sterownik dla aplikacji. Posiada m.in.. metody registerDriver(), deregisterDriver() java.sql.Connection interfejs reprezentuj cy po czenie z baz danych java.sql.Statement interfejs reprezentuj cy zapytanie SQL-owe, ktre wysy ane jest w celu wykonania do bazy danych. Podstawowe metody ResultSet executeQuery(), int executeUpdate()

Wybrane klasy i interfejsy JDBC II


java.sql.ResultSet interfejs b d cy zbiorem rekordw zwrconych z bazy danych w wyniku wykonania zapytania, czyli jest tak wirtualn tabel (tablic w pami ci). Podstawowe metody: getXXX(), np. getString(), next(), previous() java.sql.RowSet
Rozszerza ResultSet o mo liwo ci JavaBeans (w a ciwo ci, odbiorcy zdarze ) atwiejsza praca na danych (przewijanie wynikw, modyfikacje danych) od JDK 1.4 http://java.sun.com/developer/onlineTraining/Database/jdbcrowset s.pdf

java.sql.SQLException klasa umo liwiaj ca dost p do informacji o b dzie bazy danych (zgodnie z XOPEN SQL)

Po czenie poprzez most JDBC:ODBC


Rejestracja rd a ODBC do bazy Access I
1. Utworzenie bazy danych w Accessie i zapis do pliku *.mdb (nale y

zapami ta

cie k )

2. Rejestracja rd a ODBC. W panelu sterowania wybieramy program 32bit ODBC lub uruchamiamy bezpo rednio program odbcad32.exe z katalogu Windows/System32. Na zak adce rd a systemowe lub u ytkownika wybieramy Dodaj i tworzymy nowe rd o. Podajemy jego nazw (ktr musimy zapami ta ), wybieramy odpowiedni sterownik do bazy danych z listy oraz wskazujemy plik bazy danych.

Po czenie poprzez most JDBC:ODBC


Rejestracja rd a ODBC do bazy Access II

Po czenie do bazy danych poprzez JDBC I


URL bazy danych
URL (Uniform Resource Locator) bazy danych Konstrukcja adresu: jdbc:<subprotok >:<nazwa> R ne dla r nych producentw jdbc:odbc:baza most jdbc-odbc (baza nazwa rd a ODBC) jdbc:msql://db_serwer:port/baza baza MSQL jdbc:mysql://[host:port],[host:port].../ [database][?propertyName1][=propertyValu e1][&propertyName2][=propertyValue2]... baza MySQL jdbc:oracle:thin:dbhost:1234:baza baza Oracle

Po czenie do bazy danych poprzez JDBC II


Klasy sterownika
Instalacja sterownika mysql-connector-java-[version]-bin.jar Ustawienie zmiennej systemowej CLASSPATH $ setenv CLASSPATH /path/to/mysqlconnector-java-[version]bin.jar:$CLASSPATH UNIX C:\> set CLASSPATH=\path\to\mysqlconnector-java-[version]bin.jar;%CLASSPATH% WINDOWS Za adowanie sterownika w programie Class.forName(com.mysql.jdbc.Driver);
Class.forName(sun.jdbc.odbc.JdbcOdbcDriver);

Przyk ad po czenia do bazy poprzez JDBC I


(http://www.sybase.com)
import java.sql.*; public class myConnection { public static void main( String[] args ) { try { // Using Sybase jConnect 4.2 Class.forName("com.sybase.jdbc.SybDriver"); // Using Sybase jConnect 5.2 //Class.forName("com.sybase.jdbc2.jdbc.SybDriver"); Connection conn = DriverManager.getConnection("jdbc:sybase:Tds:testmachine -pc:2638", "dba", "sql");

Przyk ad po czenia do bazy poprzez JDBC II


Statement stmt = conn.createStatement( ); ResultSet rs = stmt.executeQuery( "SELECT * FROM EMPLOYEE"); while ( rs.next( ) ) { System.out.println( rs.getInt( 1 ) ); } } catch ( Exception e ) { System.out.println( "An exception occurred." ); } } // end of main } // end of MyConnection class

SQL (Structured Query Language)


SELECT - instrukcja pobrania danych z bazy, np..
Select * from studenci Select Nazwisko, Imie, Sum(nieobecnosc), Avg(ocena) from studenci s, obecnosci ob, oceny oc where ob.id_student=s.id_student and oc.id_student=s.id_student and s.nazwisko like No% and ob.nieobecnosc>2 or (oc.cwiczenia=java and oc.ocena>2)

INSERT - instrukcja wstawiania do bazy danych, np..


Insert into oceny (id, cwiczenia, ocena) 5.0) values (1, java,

UPDATE - instrukcja modyfikacji danych, np..


update studenci set ocena_java = 5.0 update obecnosci set obecnosc=usprawiedliwiona where data between 2004-01-01 and 2004-06-10

Praca z baz danych poprzez JDBC I


Pobieranie danych Statement stmt = conn.createStatement( ); ResultSet rs = statement.exequteQuery(Select * from studenci); while ( rs.next( ) ) { System.out.println( rs.getString( 1 )+ + ... ); } Modyfikacja danych int ile_zmodyfikowano = statement.exequteUpdate( Insert into oceny (id, cwiczenia, ocena) values (1, java, 5.0)); int ile_zmodyfikowano = statement.exequteUpdate(update studenci set ocena_java = 5.0);

Praca z baz danych poprzez JDBC II


Obs uga transakcji W czenie w asnej obs ugi transakcji: connection.setAutocommit(false); Zatwierdzenie transakcji: Rodzaje ResultSet Domy lnie przesuwany w d , do odczytu stm = con.createStatement(); Przewijany w obie strony, nie reaguj cu na zmiany w bazie, z mozliwo ci modyfikacji danych stm = con.createStatement (ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE); Modyfikacja danych poprzez ResultSet UPDATE rs.first(); rs.updateString(Miasto, Lublin); DELETE
rs.absolute(100); rs.deleteRow();

connection.commit();

Cofniecie zmian: connection.rollback();

Praca z baz danych poprzez JDBC III


Zapytania z parametrem Prepared Statements
PreparedStatement pstm = conn.prepareStatement(UPDATE STUDENT SET OCENA=? WHERE OBEC_NA_WYKL>?); pstm.setString(1, bdb); pstm.setInt(10); stm.execute();

Wywo ywanie procedur sk adowanych Callable Statements


CallableStatement cstm = conn.prepareCall({?=call best_transaction(?,?)}); cstm.registerOutParameter(1,java.sql.Types.INTEGER); cstm.setDate(2,data_od); cstm.setDate(3,data_do); cstm.execute();

Praca z baz danych poprzez JDBC IV


Metadane ResultSetMetaData: getColumnCount(), getColumnLabel(), isCaseSensitive(), itd. DatabaseMetaData: getTables(), getPrimaryKeys(), getUserName(), itd. Wi cej o JDBC http://java.sun.com/docs/books/tutorial/jdbc /basics/index.html http://java.sun.com/developer/onlineTraining /distributed/

You might also like