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

Połączenia między bazami danych i programem w …zofia.kruczkiewicz.staff.iiar.pwr.wroc.pl/wyklady/java/...Na ka żdej maszynie klienta jest potrzebny dodatkowy kod, podobnie jak

Embed Size (px)

Citation preview

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

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 2

2. JDBC (Java Database Connectivity) - połączenia z relacyjnymi bazami danych. Wprowadzenie

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

2.1. Cztery 2.1. Cztery 2.1. Cztery 2.1. Cztery kategorie sterowników JDBCkategorie sterowników JDBCkategorie sterowników JDBCkategorie 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

2. Native-API partly-Java driver:

Rodzaj sterownika, skompilowanego

dla wybranego systemu operacy-

jnego, który tłumaczy wywołania

JDBC na wywołania API klienta

następujących baz danych: Oracle,

Sybase, Informix, IBM DB2, i

innych. Na każdej maszynie klienta

jest potrzebny dodatkowy kod,

podobnie jak w pierwszym

przypadku. Bardziej funkcjonalna i

wydajna metoda niż pierwsza

metoda, jednak gorsza od sterownika

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 4

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 oprogra-

mowania 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śre-

dniczą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 oprogra-

mowania 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 5

Sterowniki

Vendor Name J2EE

1.2 J2EE

1.3 J2EE

1.4

JDBCTM

API

version

Driver

Type(s) DBMS(s)

Supported Conn.

Pooling DataSource Dist.

Trans RowSets Availability

Broadband

Communications

Solutions Corp. 2.x 3

4 MS Access

MS SQL Server x x x x Now

Broadband

Communications

Solutions Corp. 3.x 3

4 MS Access

MS SQL Server x x x x Now

ATINAV, INC 1.x 3

FoxPro

MS Access

dBase

xbase

n/a n/a n/a n/a Now

Broadband

Communications

Solutions Corp 3.x 1 MS Access

MS SQL Server n/a x n/a x NO

Broadband

Communications

Solutions Corp. 3.x

1

2

3

4

JDBC

MS Access x x x x now

CONNX

Solutions 2.x 3

DB2

DataFlex/PowerFlex

FoxPro

Informix

MS Access

MS SQL Server

Oracle

RDB

RMS

Sybase

Text (CSV, Tab

separated etc.)

VSAM

dBase

x x - x Now

DataDirect

Technologies

Sun J2EE Licensee 3.x 3

ADABAS

Centura SQLBase

Clipper

Datacom

FoxPro

IBM AS/400

IDMS

IMS

Ingres

MS Access

OS/390 Sequential

Files

OpenIngres

Paradox

Pervasive.SQL

Progress

Text (CSV, Tab

separated etc.)

VSAM

XML

dBase

x x x x

Now

Distributed

with Sun

Java Studio

Creator and

Sun Java

System

Application

Server

Easysoft 1.x 3

CISAM

InterBase

MS Access

MS SQL Server

ODBC

Oracle

RMS

- - - - Now

Easysoft 2.x 3

CISAM

InterBase

MS Access

MS SQL Server

- - - - Now

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

ODBC

Oracle

RMS

IDS Software 2.x 3

DB2

FoxPro

Informix

Ingres

MS Access

MS SQL Server

MySQL

ODBC

Oracle

PostgreSQL

Sybase

YARD-SQL

dBase

mSQL

x x - x Now

IDS Software 1.x 3

DB2

FoxPro

Informix

Ingres

MS Access

MS SQL Server

MySQL

ODBC

Oracle

PostgreSQL

Sybase

YARD-SQL

dBase

mSQL

x x - x Now

IDS Software 3.x 3

DB2

FoxPro

Informix

Ingres

MS Access

MS SQL Server

MySQL

ODBC

Oracle

PostgreSQL

Sybase

YARD-SQL

dBase

mSQL

x x x x Now

InfoZoom 1.x 2 MS Access

MS SQL Server n/a n/a n/a n/a FCS,

March 2000

InfoZoom 2.x 2 MS Access

MS SQL Server - - - - FCS,

March 2000

JNetDirect 2.x 1 MS

Access x x x x Now

JNetDirect 1.x 3

4

FoxPro

Informix

Ingres

MS Access

MS SQL

Server

MySQL

ODBC

Oracle

Sybase

dBase

n/a n/a n/a n/a Now

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

i-net software 2.x 3

DB2

Informix

JDBC

MS Access

MS SQL Server

MySQL

ODBC

Oracle

PostgreSQL

SAP DB

Sybase

- - - - Now

iWay Software 2.x 3

ADABAS

ALLBASE SQL

CA-IDMS

CISAM

Cache

Cloudscape

DL/I

Datacom

Enscribe

IDMS

IMS

ImageSQL

Ingres

MS Access

PICK

Progress

RDB

RMS

Redbrick

Warehouse

Sybase

Teradata RDBMS

TurboIMAGE

UNIFY

VSAM

dBase

x x - x Now

infoZoom 2.x 2 MS Access

MS SQL Server - - - - March

2000 Final

infoZoom 1.x 2 MS Access

MS SQL Server

OleDB-Provider n/a n/a n/a n/a Now

pravin 1.x 2

JDBC

MS Access

MS SQL Server

Mimer SQL

MySQL

ODBC

x x x x yes

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

2.2. Procedura posługiwania się sterownikiem JDBC-ODBC

1) Utworzenie relacyjnej bazy danych np. w MS Access np. katalog.mdb zawierającej tabele Tytul i Ksiazka

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

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 MS Access 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 10

• 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 11

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 parametry: 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 12

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"; try { 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(); try { 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 13

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"; try { 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 14

static public void main(String arg[]) { baza7_2 baza = new baza7_2(); try { 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 15

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"; try { 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(); try { polecenie.executeUpdate("DROP TABLE Ksiazka;"); polecenie.executeUpdate("DROP TABLE Tytul;"); } catch (SQLException e) { System.out.println("Nie mozna usunac tabeli"); } try { 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"); } try { 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 16

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(); try { 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 17

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 ); try { 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; try { 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 // klasa zawierająca składowe typu dane odpowiadająca tabeli Tytul { public String tytul, autor; public int ISBN;

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 18

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 trybu transakcji auto-commit try { 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); try { 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 19

void polaczenie_z_baza() throws SQLException { data="jdbc:odbc:Katalog"; try { 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 20

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(); try { 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 21

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 22

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; try { 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()); } try { 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 23

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() { try { 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"; try { polaczenie = driver.connect(data, new Properties()); } catch (SQLException e) { //…………… } //…………… }