Autor: Zofia Kruczkiewicz, Programowanie w Internecie, JDBC, część 1 1

Podobne dokumenty
Protokół JDBC współpraca z relacyjnymi bazami danych

Połączenia między bazami danych i programem w języku Java część 2

Protokół JDBC współpraca z relacyjnymi bazami danych lab4. Dr inż. Zofia Kruczkiewicz Programowanie aplikacji internetowych

Protokół JDBC współpraca z relacyjnymi bazami danych lab3

JDBC (Java Database Connectivity vit )

Bezpieczne uruchamianie apletów wg

Informatyka I. Programowanie aplikacji bazodanowych w języku Java. Standard JDBC.

Mechanizmy RMI i JDBC w dostępie do baz danych (Michał Grochala: Java aplikacje bazodanowe, Helion, 2001)

Informatyka I. Standard JDBC Programowanie aplikacji bazodanowych w języku Java

Aplikacje bazodanowe. dr inż. Arkadiusz Mirakowski

Programowanie w języku Java. Bazy danych SQLite w Javie

JAVA bazy danych. na bazie: Język Java - Podstawy Programowania - Jacek Rumiński

JAVA I BAZY DANYCH. MATERIAŁY:

Metody dostępu do danych

1. Czynności przygotowujące aplikację działającą na platformie Java SE Biblioteka5 (należy ją pobrać z załącznika z p.1)

Mechanizmy RMI i JDBC w dostępie do baz danych

Programowanie w języku Java

Programowanie komputerów. Wykład 10: Dostęp do baz danych z poziomu aplikacji Java. (JDBC Database Access)

Sposoby tworzenia projektu zawierającego aplet w środowisku NetBeans. Metody zabezpieczenia komputera użytkownika przed działaniem apletu.

Wprowadzenie do JDBC z wykorzystaniem bazy H2

Instytut Sterowania i Systemów Informatycznych Uniwersytet Zielonogórski. Zaawansowane Systemy Decyzyjne. Laboratorium

dziennik Instrukcja obsługi

STRUMIENIE DANYCH, SERIALIZACJA OBIEKTÓW

Wieloplatformowe aplikacje sieciowe. dr inż. Juliusz Mikoda mgr inż. Anna Wawszczak

Programowanie obiektowe. Literatura: Autor: dr inŝ. Zofia Kruczkiewicz

Rozdział 9 Obsługa baz danych w języku Java

Wprowadzenie do technologii JavaServer Faces 2.1 na podstawie

Java Database Connectivity

Java Zadanie 1. Aby poprawnie uruchomić aplikację desktopową, należy zaimplementować główną metodę zapewniającą punkt wejścia do programu.

Java i jej wykorzystanie do tworzenia dynamicznych aplikacji Webowych

Plan wykładu. Dostęp do bazy danych. Architektura JDBC. Dostęp do baz danych z aplikacji Java EE

Wprowadzenie do technologii JavaServer Faces 2.1 na podstawie

Podstawy otwartych języków programowania Java Database Connectivity (JDBC)

Programowanie obiektowe zastosowanie języka Java SE

Połączenie z bazą danych

STRUMIENIE TEKSTOWE WEJŚCIOWE WPROWADZANIE DANYCH STRUMIENIE BAJTOWE, STRUMIENIE TEKSTOWE

sieć 4) Mechanizm RMI jest zazwyczaj wykorzystywany w rozwiązaniach typu klient-serwer.

Dostęp do baz danych z serwisu www - PHP. Wydział Fizyki i Informatyki Stosowanej Joanna Paszkowska, 4 rok FK

1.1. System otwartych baz danych ODBC. System otwartych baz danych ODBC. Interfejs ODBC. Interfejs ODBC. System otwartych baz danych ODBC

Podstawowe informacje o bazach danych. Technologie Informacyjne

SPSS. Inc. Instrukcje instalacyjne pakietu Data Access Pack for Windows

JDBC w LoXiMie. Interfejs Java Database Connectivity dla systemu LoXiM. Adam Michalik 2008

Wykorzystywanie parsera DOM w programach Java i PL/SQL

Podejście obiektowe. Tablice obiektów Przykład 1 metody i atrybuty statyczne oraz niestatyczne

JDBC - Obsługa baz danych w języku Java

Bazy danych SQLite w Javie

Języki i metody programowania Java INF302W Wykład 2 (część 1)

Database Connectivity

Materiały oryginalne: ZAWWW-2st1.2-l11.tresc-1.0kolor.pdf. Materiały poprawione

Problemy techniczne SQL Server

Programowanie obiektowe

Bartosz Jachnik - Kino

Problemy techniczne SQL Server

Łączenie z bazą danych przykładowa klasa infpolaczenie import java.sql.drivermanager; import java.sql.connection; import java.sql.

Instrukcje instalacji pakietu IBM SPSS Data Access Pack dla systemu Windows

Java Database Connectivity

Programowanie MSQL. show databases; - pokazanie jakie bazy danych są dostępne na koncie

Zaawansowane aplikacje internetowe - laboratorium Architektura CORBA.

Problemy techniczne SQL Server. Zarządzanie bazami danych na serwerze SQL

Języki i metody programowania Java. Wykład 2 (część 2)

akademia androida Składowanie danych część VI

Aplikacje RMI. Budowa aplikacji rozproszonych. Część 2.

Aplikacje RMI Lab4

Pętle while, for, do while, instrukcje break, continue, switch 1. Pętle

Problemy techniczne SQL Server. Zarządzanie bazami danych na serwerze SQL

Laboratorium Programowania Kart Elektronicznych

Ćwiczenia laboratoryjne nr 11 Bazy danych i SQL.

Aplikacje RMI

1 Wprowadzenie do J2EE

Paweł Cieśla. Dokumentacja projektu

Języki programowania wysokiego poziomu. PHP cz.4. Bazy danych

Bazy Danych i Usługi Sieciowe

Podejście obiektowe. Tablice (1) obiektów

SIECI KOMPUTEROWE I BAZY DANYCH

DB+frontend Inne języki H2. Bazy Danych i Systemy informacyjne Wykład 9. Piotr Syga

Język JAVA podstawy. wykład 2, część 1. Jacek Rumiński. Politechnika Gdańska, Inżynieria Biomedyczna

Katedra Architektury Systemów Komputerowych Wydział Elektroniki, Telekomunikacji i Informatyki Politechniki Gdańskiej

Aplikacje Internetowe

Db4o obiektowa baza danych wersja.net

Wykład 05 Bazy danych

Programowanie obiektowe

strukturalny język zapytań używany do tworzenia i modyfikowania baz danych oraz do umieszczania i pobierania danych z baz danych

JDBC. Plan ćwiczenia. Wywoływanie poleceń SQL z języków programowania. Plan ćwiczenia cd. Wprowadzenie do laboratorium

Zaawansowane aplikacje internetowe - laboratorium Web Services (część 1).

Bazy danych i usługi sieciowe

Pojęcie systemu baz danych

Laboratorium nr 1. Temat: Wprowadzenie do MySQL-a

Obiektowe programowanie rozproszone Java RMI. Krzysztof Banaś Systemy rozproszone 1

Marcin Luckner Politechnika Warszawska Wydział Matematyki i Nauk Informacyjnych

Systemy internetowe. Wykład 4 mysql. West Pomeranian University of Technology, Szczecin; Faculty of Computer Science

Laboratorium - Poznawanie FTP

Narzędzia i aplikacje Java EE. Usługi sieciowe Paweł Czarnul pczarnul@eti.pg.gda.pl

Kurs programowania aplikacji bazodanowych

Wykład 2: Podstawy Języka

Założenia do ćwiczeń: SQL Server UWM Express Edition: \SQLEXPRESS. Zapoznaj się ze sposobami użycia narzędzia T SQL z wiersza poleceń.

Języki i metody programowania Java INF302W Wykład 3 (część 1)

Bazy danych. Wykład IV SQL - wprowadzenie. Copyrights by Arkadiusz Rzucidło 1

Programowanie w Javie Lista nr 1. Wybieramy kategorię Java, a wśród Projektów Java Application i [NEXT]

Java rozszerzenie. dr. A. Dawid

Firebird Alternatywa dla popularnych darmowych systemów bazodanowych MySQL i Postgres

Transkrypt:

Połączenia między bazami danych i programem w języku Java część 1 1. Java 5.0 Autor: Zofia Kruczkiewicz, Programowanie w Internecie, JDBC, część 1 1

2. JDBC (Java Database Connectivity) - połączenia z relacyjnymi bazami danych. Wprowadzenie Autor: Zofia Kruczkiewicz, Programowanie w Internecie, JDBC, część 1 2

2.1. Cztery kategorie sterowników JDBC 1. JDBC-ODBC bridge plus ODBC driver (Open Database Connectivity): Rodzaj sterownika wspieranego sterownikiem ODBC w dostępie do baz danych (polecenia JDBC są tłumaczone na polecenia ODBC). Potrzebny jest sterownik ODBC wspierający dostęp do wybranej bazy danych oraz dodatkowy kod na każdej maszynie klienta. Najprostsza metoda, jednak należy ją stosować wtedy, gdy brakuje sterownika Javy, bezpośrednio łączącego z wybraną bazą danych (4-ty typ). Sterownik jest zrealizowany za pomocą klasy sun.jdbc.odbc.jdbcodbcdriver Rodzaj sterownika, skompilowanego jnego, który tłumaczy wywołania JDBC na wywołania API klienta następujących baz danych: Oracle, innych. Na każdej maszynie klienta przypadku. Bardziej funkcjonalna i metoda, jednak gorsza od sterownika 2. Native-API partly-java driver: dla wybranego systemu operacy- Sybase, Informix, IBM DB2, i jest potrzebny dodatkowy kod, podobnie jak w pierwszym wydajna metoda niż pierwsza Javy, bezpośrednio łączącego z wybraną bazą danych (4-ty typ). http://en.wikipedia.org/wiki/jdbc_type_1_driver http://en.wikipedia.org/wiki/jdbc_type_2_driver Autor: Zofia Kruczkiewicz, Programowanie w Internecie, JDBC, część 1 3

3. JDBC-Net pure Java driver: Rodzaj sterownika, który tłumaczy wywołania JDBC na niezależny od baz danych protokół sieciowy, który jest dopiero przez specjalny serwer tłumaczony na język danej DBMS. Sterownik jest w pełni napisany w Javie, stanowi elastyczne połączenie do baz danych i jest niezależny od systemu operacyjnego. Nie wymaga instalowania dodatkowego oprogramowania po stronie klienta. 4. Native-protocol pure Java driver: Rodzaj sterownika bezpośrednio łączący wywołania JDBC do protokołu używanego przez DBMSs. Dotyczy to wielu baz danych; Oracle, Sybase, Informix, IBM DB2, Inprise InterBase, i Microsoft SQL Server. Ten sterownik warstwy pośredniczącej jest w pełni napisany w Javie, jest niezależny od systemu operacyjnego i jest wydajniejszy od pierwszej i drugiej metody łączenia z bazami danych. Nie wymaga instalowania dodatkowego oprogramowania po stronie klienta. http://en.wikipedia.org/wiki/jdbc_type_3_driver http://en.wikipedia.org/wiki/jdbc_type_4_driver Autor: Zofia Kruczkiewicz, Programowanie w Internecie, JDBC, część 1 4

Sterowniki Vendor Name Broadband Communications Solutions Corp. Broadband Communications Solutions Corp. J2EE 1.2 J2EE 1.3 J2EE 1.4 JDBC TM API version 2.x 3.x Driver Type(s) 3 4 3 4 ATINAV, INC 1.x 3 Broadband Communications Solutions Corp Broadband Communications Solutions Corp. CONNX Solutions DataDirect Technologies Sun J2EE Licensee 3.x 1 3.x 1 2 3 4 2.x 3 3.x 3 Easysoft 1.x 3 Easysoft 2.x 3 DBMS(s) Supported FoxPro dbase xbase JDBC DB2 DataFlex/PowerFlex FoxPro Informix Oracle RDB RMS Sybase Text (CSV, Tab separated etc.) VSAM dbase ADABAS Centura SQLBase Clipper Datacom FoxPro IBM AS/400 IDMS IMS Ingres OS/390 Sequential Files OpenIngres Paradox Pervasive.SQL Progress Text (CSV, Tab separated etc.) VSAM XML dbase CISAM InterBase ODBC Oracle RMS CISAM InterBase Conn. Pooling DataSource Dist. Trans RowSets Availability x x x x Now x x x x Now n/a n/a n/a n/a Now n/a x n/a x NO x x x x now x x - x Now x x x x Now Distributed with Sun Java Studio Creator and Sun Java System Application Server - - - - Now - - - - Now Autor: Zofia Kruczkiewicz, Programowanie w Internecie, JDBC, część 1 5

IDS Software 2.x 3 IDS Software 1.x 3 IDS Software 3.x 3 InfoZoom 1.x 2 InfoZoom 2.x 2 JNetDirect 2.x 1 JNetDirect 1.x 3 4 ODBC Oracle RMS DB2 FoxPro Informix Ingres MySQL ODBC Oracle PostgreSQL Sybase YARD-SQL dbase msql DB2 FoxPro Informix Ingres MySQL ODBC Oracle PostgreSQL Sybase YARD-SQL dbase msql DB2 FoxPro Informix Ingres MySQL ODBC Oracle PostgreSQL Sybase YARD-SQL dbase msql MS Access FoxPro Informix Ingres MS SQL Server MySQL ODBC Oracle Sybase dbase x x - x Now x x - x Now x x x x Now n/a n/a n/a n/a - - - - FCS, March 2000 FCS, March 2000 x x x x Now n/a n/a n/a n/a Now Autor: Zofia Kruczkiewicz, Programowanie w Internecie, JDBC, część 1 6

i-net software 2.x 3 iway Software 2.x 3 infozoom 2.x 2 infozoom 1.x 2 pravin 1.x 2 DB2 Informix JDBC MySQL ODBC Oracle PostgreSQL SAP DB Sybase ADABAS ALLBASE SQL CA-IDMS CISAM Cache Cloudscape DL/I Datacom Enscribe IDMS IMS ImageSQL Ingres PICK Progress RDB RMS Redbrick Warehouse Sybase Teradata RDBMS TurboIMAGE UNIFY VSAM dbase OleDB-Provider JDBC Mimer SQL MySQL ODBC - - - - Now x x - x Now - - - - March 2000 Final n/a n/a n/a n/a Now x x x x yes Autor: Zofia Kruczkiewicz, Programowanie w Internecie, JDBC, część 1 7

2.2. Procedura posługiwania się sterownikiem JDBC-ODBC 1) Utworzenie relacyjnej bazy danych np. w np. katalog.mdb zawierającej tabele Tytul i Ksiazka Autor: Zofia Kruczkiewicz, Programowanie w Internecie, JDBC, część 1 8

2) Połączenie bazy danych ze źródłem danych ODBC, które zostanie skojarzone z plikiem katalog.mdb za pomocą administratora ODBC systemu Windows wywołaj ODBC Data Source Administrator systemu Windows i kliknij na zakładkę User DSN kliknij Add w celu wybrania właściwego sterownika ODBC dla i naciśnij Zakończ w nowym oknie wpisz nazwę nowego źródła danych (Katalog) Autor: Zofia Kruczkiewicz, Programowanie w Internecie, JDBC, część 1 9

po kliknięciu na zakładkę Wybierz wybierz katalog z plikiem katalog.mdb i kliknij OK w celu dodania źródła danych Katalog związanego z plikiem katalog.mdb kliknij OK otrzymano nowe źródło danych Katalog związane z plikiem katalog.mdb (baza danych) Autor: Zofia Kruczkiewicz, Programowanie w Internecie, JDBC, część 1 10

3) napisanie programu wykonanie łańcucha typu String data identyfikującego źródło danych i rodzaj połączenia do bazy danych Łańcuch data składa się z trzech członów: <protokół>:<podprotokół>:<nazwa_źródła_danych> np. data =jdbc:odbc://sprocket.ict.pwr.wroc.pl:5000/katalog lub data ="jdbc:odbc:katalog"; załadowanie sterownika za pomocą wywołania Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");, gdzie metoda forname ładuje klasę o nazwie podanej jako parametr do interpretera ( java.lang) połączenie ze źródłem danych za pomocą klasy Driver Manager (java.sql) polaczenie = DriverManager.getConnection(data, "", ""); gdzie połączenie jest referencją do obiektu typu Connection. Metoda getconnection ma trzy parame: data, nazwę użytkownika (w przykładzie pusta), hasło (w przykładzie puste) przygotowanie polecenia SQL za pomocą obiektu typu Statement: polecenie = polaczenie.createstatement(); przygotowanie zapytania SQL sql="select * FROM Tytul ORDER BY tytul;"; np. do wyboru wszystkich kolumn tabeli Tytul wykonanie zapytania SQL: krotka = polecenie.executequery(sql); zostanie zwrócony wynik zapytania w postaci obiektu typu ResultSet, który ma następujące metody: getdate(string s) zwraca wartość typu Date zawartą w określonej kolumnie wiersza getdouble(string s) zwraca wartość typu double zawartą w określonej kolumnie wiersza getfloat(string s) zwraca wartość typu float zawartą w określonej kolumnie wiersza getint(string s) zwraca wartość typu int zawartą w określonej kolumnie wiersza getlong(string s) zwraca wartość typu long zawartą w określonej kolumnie wiersza getstring(string s) zwraca wartość typu String zawartą w określonej kolumnie wiersza Do nawigacji po pozostałych rekordach uzyskanych po wykonaniu zapytania SQL: next() przejście do następnego rekordu afterlast() przejście do ostatniego rekordu afterfirst() przejście do pierwszego rekordu first() przejście do pierwszego rekordu last() przejście do ostatniego rekordu previous() przejście do poprzedniego rekordu Po zakończeniu pracy ze źródłem danych zamknięcie połączenia polecenie.close(); Autor: Zofia Kruczkiewicz, Programowanie w Internecie, JDBC, część 1 11

2.3. Przykłady zastosowania sterowników JDBC-ODBC Przykład 1 import java.sql.*; public class baza7_1 { String data, sql; Connection polaczenie; Statement polecenie; ResultSet krotka; void polaczenie_z_baza() throws SQLException { data="jdbc:odbc:katalog1"; { Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); catch (Exception e) { System.out.println("Nie mozna zaladowac sterownika"); throw new SQLException(e.toString()); polaczenie=drivermanager.getconnection(data,"",""); void wyswietl_tytuly() throws SQLException { polecenie = polaczenie.createstatement(); sql="select * FROM Tytul ORDER BY tytul;"; krotka = polecenie.executequery(sql); while(krotka.next()) { System.out.println( krotka.getstring("tytul")+"\t" +krotka.getstring("autor")+"\t" +krotka.getstring("isbn")); polecenie.close(); static public void main(string arg[]) { baza7_1 baza = new baza7_1(); { baza.polaczenie_z_baza(); baza.wyswietl_tytuly(); catch(sqlexception e) { System.out.println("Blad bazy "+e); Autor: Zofia Kruczkiewicz, Programowanie w Internecie, JDBC, część 1 12

Przykład 2 import java.sql.*; public class baza7_2 { String data, sql; Connection polaczenie; Statement polecenie; ResultSet krotka; void polaczenie_z_baza() throws SQLException { data="jdbc:odbc:katalog1"; { Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); catch (Exception e) { System.out.println("Nie mozna zaladowac sterownika"); throw new SQLException(e.toString()); polaczenie=drivermanager.getconnection(data,"",""); void wyswietl_tytuly() throws SQLException { polecenie = polaczenie.createstatement(); sql="select * FROM Tytul ORDER BY tytul;"; krotka = polecenie.executequery(sql); while(krotka.next()) { System.out.println(krotka.getString("tytul")+"\t" +krotka.getstring("autor")+"\t" +krotka.getstring("isbn")); polecenie.close(); void wyswietl_ksiazki() throws SQLException { polecenie = polaczenie.createstatement(); sql="select * FROM Tytul, Ksiazka " +" WHERE id_tytul=id_tytul_ " +" ORDER BY tytul;"; krotka = polecenie.executequery(sql); while(krotka.next()) { System.out.println(krotka.getString("tytul")+"\t" +krotka.getstring("autor")+"\t" +krotka.getstring("isbn")+"\t" +krotka.getstring("numer")); polecenie.close(); Autor: Zofia Kruczkiewicz, Programowanie w Internecie, JDBC, część 1 13

static public void main(string arg[]) { baza7_2 baza = new baza7_2(); { baza.polaczenie_z_baza(); System.out.println("Tytuly"); baza.wyswietl_tytuly(); System.out.println("Ksiazki"); baza.wyswietl_ksiazki(); catch(sqlexception e) { System.out.println("Blad bazy "+e); Autor: Zofia Kruczkiewicz, Programowanie w Internecie, JDBC, część 1 14

Przykład 3 import java.sql.*; public class baza7_0 { String data, sql; Connection polaczenie; Statement polecenie; ResultSet krotki; void polaczenie_z_baza() throws SQLException { data="jdbc:odbc:katalog"; { Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); catch (Exception e) { System.out.println("Nie mozna zaladowac sterownika"); throw new SQLException(e.toString()); polaczenie=drivermanager.getconnection(data,"",""); void tabele() throws SQLException { polecenie = polaczenie.createstatement(); { polecenie.executeupdate("drop TABLE Ksiazka;"); polecenie.executeupdate("drop TABLE Tytul;"); catch (SQLException e) { System.out.println("Nie mozna usunac tabeli"); { polecenie.executeupdate( "CREATE TABLE Tytul (id_tytul INTEGER, tytul VARCHAR(50),"+ "autor VARCHAR(50), ISBN INTEGER, PRIMARY KEY (id_tytul));"); catch (SQLException e) { System.out.println("Nie mozna zalozyc tabeli Tytul"); { polecenie.executeupdate( "CREATE TABLE Ksiazka (id_ksiazka INTEGER, numer INTEGER, "+ "id_tytul_ INTEGER, PRIMARY KEY (id_ksiazka), "+ "FOREIGN KEY (id_tytul_) REFERENCES Tytul (id_tytul));"); catch (SQLException e) { System.out.println("Nie mozna zalozyc tabeli Ksiazka"); for (int i=1; i<10; i++) { polecenie.executeupdate("insert INTO Tytul (id_tytul, tytul, autor, ISBN)"+ " VALUES ("+i+",'tytul"+i+"','autor"+i+"',"+i+");"); Autor: Zofia Kruczkiewicz, Programowanie w Internecie, JDBC, część 1 15

void wyswietl_tytuly() throws SQLException { polecenie = polaczenie.createstatement(); sql="select * FROM Tytul ORDER BY tytul;"; krotki = polecenie.executequery(sql); ResultSetMetaData metadane = krotki.getmetadata(); int kolumny = metadane.getcolumncount(); for (int i=0; i<kolumny; i++) System.out.println("Nazwa kolumny "+i+" "+ metadane.getcolumnname(i+1)); System.out.println(); for (int i=1; i<kolumny; i++) System.out.print(metaDane.getColumnName(i+1)+"\t"); System.out.println("\n"); while(krotki.next()) { System.out.println( krotki.getstring("tytul")+"\t" +krotki.getstring("autor")+"\t" +krotki.getstring("isbn")); polecenie.close(); static public void main(string arg[]) { baza7_0 baza = new baza7_0(); { baza.polaczenie_z_baza(); baza.tabele(); baza.wyswietl_tytuly(); catch(sqlexception e) { System.out.println(e.getMessage()); while(null!= (e=e.getnextexception())) System.out.println(e.getMessage()); Autor: Zofia Kruczkiewicz, Programowanie w Internecie, JDBC, część 1 16

Przykład 4 import java.sql.*; import java.io.*; import java.util.*; class WeWy { static String westring(string menu) { InputStreamReader wejscie = new InputStreamReader( System.in ); BufferedReader bufor = new BufferedReader( wejscie ); { System.out.print(menu); return bufor.readline(); catch (IOException e) { System.err.println("Blad IO String"); return ""; static byte weinteger(string menu) { InputStreamReader wejscie = new InputStreamReader( System.in ); BufferedReader bufor = new BufferedReader( wejscie ); StringTokenizer zeton; { System.out.print(menu); zeton = new StringTokenizer(bufor.readLine()); return Byte.parseByte(zeton.nextToken()); catch (Exception e) { System.err.println("Blad Integer "+e); return 0; class Tytul { public String tytul, autor; public int ISBN; // klasa zawierająca składowe typu dane odpowiadająca tabeli Tytul void wstaw_tytul() { tytul = WeWy.weString("Podaj tytul: "); autor = WeWy.weString("Podaj autora: "); ISBN = WeWy.weInteger("Podaj ISBN: "); class Ksiazka // klasa zawierająca składowe typu dane odpowiadająca tabeli Ksiazka { public int numer; void wstaw_ksiazke() { numer = WeWy.weInteger("Podaj numer ksiazki: "); Autor: Zofia Kruczkiewicz, Programowanie w Internecie, JDBC, część 1 17

public class baza7_3 { String data, sql; Connection polaczenie; Statement polecenie; ResultSet krotka; void wstaw_tytul() throws SQLException { Tytul t = new Tytul(); t.wstaw_tytul(); polaczenie.setautocommit(false); //wyłączenie bu transakcji auto-commit { polecenie = polaczenie.createstatement(); sql="insert INTO Tytul (tytul, autor, ISBN)"+ " VALUES (' "+t.tytul+ " ',' "+ t.autor+" ',' "+ t.isbn+" ')"; polecenie.addbatch(sql); //wprowadzenie 1 operacji SQL (można podać więcej operacji // w kolejnych wywołanych metodach addbatch) polecenie.executebatch(); //wywołanie wykonania operacji (lub wielu operacji) polaczenie.commit(); //zamknięcie transakcji catch(batchupdateexception e) //wyjątek dziedziczący po SQLException { System.out.println("Wycofanie transakcji"); polaczenie.rollback(); //jeśli wystąpiły problemy, należy odwołać transakcję void wstaw_ksiazke() throws SQLException { Ksiazka k = new Ksiazka(); k.wstaw_ksiazke(); polaczenie.setautocommit(false); { polecenie = polaczenie.createstatement(); String tytul=wewy.westring("podaj tytul ksiazki: "); sql="select * FROM Tytul "+ "WHERE tytul= ' "+tytul+" ';"; krotka=polecenie.executequery(sql); if (!krotka.next()) return; sql="insert INTO Ksiazka (numer, id_tytul_)"+ " VALUES (' "+k.numer+ " ',' "+ krotka.getstring("id_tytul")+" ');"; polecenie.addbatch(sql); polecenie.executebatch(); polaczenie.commit(); catch(batchupdateexception e) { System.out.println("Wycofanie transakcji"); polaczenie.rollback(); Autor: Zofia Kruczkiewicz, Programowanie w Internecie, JDBC, część 1 18

void polaczenie_z_baza() throws SQLException { data="jdbc:odbc:katalog"; { Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); catch (Exception e) { System.out.println("Nie mozna zaladowac sterownika"); throw new SQLException(e.toString()); polaczenie=drivermanager.getconnection(data,"",""); void wyswietl_tytuly() throws SQLException { polecenie = polaczenie.createstatement(); sql="select * FROM Tytul ORDER BY tytul;"; krotka = polecenie.executequery(sql); while(krotka.next()) { System.out.println(krotka.getString("tytul")+"\t" +krotka.getstring("autor")+"\t"+krotka.getstring("isbn")); polecenie.close(); void wyswietl_ksiazki() throws SQLException { polecenie = polaczenie.createstatement(); sql="select * FROM Tytul, Ksiazka WHERE id_tytul=id_tytul_ " +" ORDER BY tytul;"; krotka = polecenie.executequery(sql); while(krotka.next()) { System.out.println( krotka.getstring("tytul")+"\t" +krotka.getstring("autor")+"\t" +krotka.getstring("isbn")+"\t" +krotka.getstring("numer")); polecenie.close(); void wyszukaj() throws SQLException { String co = WeWy.weString("Podaj autora: "); polecenie = polaczenie.createstatement(); sql="select * FROM Tytul, Ksiazka "+ " WHERE id_tytul=id_tytul_ AND autor = '" + co +"' "+ " ORDER BY tytul;"; krotka = polecenie.executequery(sql); while(krotka.next()) { System.out.println(krotka.getString("tytul")+"\t" +krotka.getstring("autor")+"\t" +krotka.getstring("isbn")+"\t" +krotka.getstring("numer")); polecenie.close(); Autor: Zofia Kruczkiewicz, Programowanie w Internecie, JDBC, część 1 19

void operacje_na_bazie() throws SQLException { int opcja; do { System.out.println("1 - wyswietl tytuly"); System.out.println("2 - wyswietl ksiazki"); System.out.println("3 - wyszukaj ksiazki danego autora"); System.out.println("4 - wstaw tytul"); System.out.println("5 - wstaw ksiazke"); System.out.println("-1 - koniec programu"); opcja = WeWy.weInteger("Podaj opcje: "); switch(opcja) { case 1 : System.out.println("Tytuly"); wyswietl_tytuly(); break; case 2 : System.out.println("Ksiazki"); wyswietl_ksiazki(); break; case 3 : wyszukaj(); break; case 4 : wstaw_tytul(); break; case 5 : wstaw_ksiazke(); break; case -1: System.out.println("Koniec programu"); break; default : System.out.println("Zla opcja"); while(opcja!=-1); static public void main(string arg[]) { baza7_3 baza = new baza7_3(); { baza.polaczenie_z_baza(); baza.operacje_na_bazie(); catch(sqlexception e) {System.out.println("Blad bazy "+e); Autor: Zofia Kruczkiewicz, Programowanie w Internecie, JDBC, część 1 20

2.4. Procedura posługiwania się sterownikiem JDBC na przykładzie sterownika JDataConnect firmy JNetDirect (http://www.jnetdirect.com) Propozycje prostych architektur typu 3 lub 4 z punktu 2.1 Autor: Zofia Kruczkiewicz, Programowanie w Internecie, JDBC, część 1 21

Przykład 1 Wymagania: 1) Łańcuch źródła danych jest poprawny: localhost:1150/katalog.mdb i baza danych działa 2) Zainstalowano ściągnięte oprogramowanie JDBCsetup.exe 3) Uruchomiono program serwera danych: \Program Files\NetDirect\JDataConnect\JDataServer\RunServer.bat 4) Skopiowano JData2_0.jar do katalogu projektu programu 5) Skompilowano projekt 6) Uruchomiono bajtkod np. ExampleApplication.class razem ze sterownikiem JData2_0.jar : java -classpath.;./jdata2_0.jar ExampleApplication Scenariusz programu: 1) Należy załadować sterownik JDBC typu JDataConnect. 2) Należy utworzyć połączenie typu Connection z bazą danych za pomocą JDBC Driver Manager 3) Należy wykonać zapytania na bazie danych (utworzenie obiektu typu Statement i wywołanie jego metody z przekazanym łańcuchem zapytania SQL) 4) Należy wykorzystać uzyskane wyniki zapytania typu ResultSet np. wyświetlenie na ekranie 5) Należy zamknąć połączenie uzyskane w punkcie 2. Programy z przykładów 1-3 są identyczne jedynie zmieniono metodę polaczenie_z_baza void polaczenie_z_baza() throws SQLException { Driver driver; { driver=(driver)class.forname("jdata2_0.sql.$driver").newinstance(); catch (Exception e) { System.out.println("Nie mozna zaladowac sterownika, poniewaz:"+e + ". Prawdopodobnie JData2_0.jar nie jest umieszczony w classpath"); throw new SQLException(e.toString()); { data="jdbc:jdataconnect://localhost:1150/katalog.mdb"; polaczenie = driver.connect(data, new Properties()); catch (SQLException e) { System.out.println ("Nie mozna polaczyc sie z baza danych, poniewaz:"+e); throw e; gdzie localhost reprezentuje adres internetowy (URL) komputera. Autor: Zofia Kruczkiewicz, Programowanie w Internecie, JDBC, część 1 22

Przykład 2 Tworzenie prostego apletu Wymagania: 1) Łańcuch źródła danych jest poprawny: localhost:1150/katalog.mdb i baza danych działa 2) Należy zainstalować ściągnięte oprogramowanie JDBCsetup.exe 3) Należy uruchomić program serwera danych: \Program Files\NetDirect\JDataConnect\JDataServer\RunServer.bat 4) Należy skompilować program np. ExampleApplet.java 5) Należy skopiować JData2_0.jar do katalogu oraz ExampleApplet.class np. do katalogu web serwera 6) Należy uruchomić aplet podając w pliku typu html archive tag dotyczący pliku JData2_0.jar Scenariusz programu: 1) Należy załadować sterownik JDBC typu JDataConnect. 2) Należy utworzyć połączenie typu Connection z bazą danych za pomocą JDBC Driver Manager 3) Należy wykonać zapytania na bazie danych (utworzenie obiektu typu Statement i wywołanie jego metody z przekazanym łańcuchem zapytania SQL) 4) Należy wykorzystać uzyskane wyniki zapytania typu ResultSet np. wyświetlenie na ekranie 5) Należy zamknąć połączenie uzyskane w punkcie 2 public void init() { { driver = (Driver) Class.forName("JData2_0.sql.$Driver").newInstance(); catch (Exception e) { // String host = getcodebase().gethost(); //pobranie adresu web serwera data = "jdbc:jdataconnect://localhost/mydsn:username:password_noproperties" +host+ "jdbc:jdataconnect://localhost/mydsn:username:password_properties"; { polaczenie = driver.connect(data, new Properties()); catch (SQLException e) { // // Autor: Zofia Kruczkiewicz, Programowanie w Internecie, JDBC, część 1 23