• Nie Znaleziono Wyników

Wykład 10JDBC - połączenia z relacyjnymi bazami danych 1.Procedura posługiwania się sterownikiem JDBC-ODBC

N/A
N/A
Protected

Academic year: 2021

Share "Wykład 10JDBC - połączenia z relacyjnymi bazami danych 1.Procedura posługiwania się sterownikiem JDBC-ODBC"

Copied!
1
0
0

Pełen tekst

(1)

Wykład 10

JDBC - połączenia z relacyjnymi bazami danych

1. 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

(2)

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)

(3)

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)

(4)

3) napisanie programu

wykonanie łańcucha typu String data identyfikującego źródło danych i rodzaj połączenia do bazy danych: data="jdbc:odbc:Katalog";

Łańcuch data składa się z trzech członów:

<protokół>:<podprotokół>:<nazwa_źródła_danych>

np. jdbc:odbc:Katatog

jdbc:odbc://sprocket.ict.pwr.wroc.pl:5000/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();

(5)

Przykłady zastosowania sterowników

JDBC-ODBC

Przykład 1 – Operacje wyświetlania zawartości tabeli Tytul

import java.sql.*;

public class baza7_1 {

String data, sql;

Connection polaczenie;

Statement polecenie;

ResultSet krotka;

void polaczenie_z_baza() throws Exception { data="jdbc:odbc:Katalog";

Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");

polaczenie=DriverManager.getConnection(data,"","");

}

void wyswietl_tytuly() throws Exception { 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(Exception e)

{ System.out.println("Blad bazy "+e);

} } }

(6)

Przykład 2 –

Operacje wyświetlania zawartości tabeli Tytul oraz powiązanej „jeden do wiele” tabeli Ksiazka

import java.sql.*;

public class baza7_2 {

String data, sql;

Connection polaczenie;

Statement polecenie;

ResultSet krotka;

void polaczenie_z_baza() throws Exception { data="jdbc:odbc:Katalog";

Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");

polaczenie=DriverManager.getConnection(data,"","");

}

void wyswietl_tytuly() throws Exception { 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 Exception { 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();

}

(7)

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(Exception e)

{System.out.println("Blad bazy "+e);

} } }

(8)

Przykład 3 –Aplikacja konsolowa obsługująca wybór operacji na tabelach Tytul i Ksiazka typu zapytania i transakcje

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() throws Exception { 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: "); } }

(9)

public class baza7_3 { String data, sql;

Connection polaczenie;

Statement polecenie;

ResultSet krotka;

void wstaw_tytul() throws Exception { 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)

{ System.out.println("Wycofanie transakcji");

polaczenie.rollback();} //jeśli wystąpiły problemy, należy odwołać transakcję

}

void wstaw_ksiazke() throws Exception { 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();

(10)

void polaczenie_z_baza() throws Exception { data="jdbc:odbc:Katalog";

Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");

polaczenie=DriverManager.getConnection(data,"","");

}

void wyswietl_tytuly() throws Exception { 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 Exception { 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 Exception

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

}

(11)

void operacje_na_bazie() throws Exception { 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(Exception e)

{System.out.println("Blad bazy "+e);}

} }

(12)

2. Procedura posługiwania się sterownikiem JDBC 1) Wykonać relacyjną bazę danych (punkt 1, 1))

2) połączyć bazę danych (np. plik katalog.mdb) ze sterownikiem JDBC np.

JDataConnect (http://www.jnetdirect.com/firmy - link firmy jnetDirect)

należy wykonać czynności z punktu 1, 2)

zainstalować ściągnięte oprogramowanie JDBCsetup.exe

uruchomić \Program Files\NetDirect\JDataConnect\JDataServer\RunServer.bat

skopiować zawartość katalogu JARs do katalogu programu (JDataLite.jar, JData2_0.jar, JData1_2.jar)

skompilować projekt

uruchomić „bajtkod”

Programy z przykładów 1-3 są identyczne – jedynie zmieniono metodę polaczenie void polaczenie_z_baza() throws Exception

{ data="jdbc:JDataConnect://localhost:1150/Katalog";

Class.forName("Jdata2_0.sql.$Driver");

polaczenie=DriverManager.getConnection(data,"","");

} lub

void polaczenie_z_baza() throws Exception

{ data="jdbc:JDataConnect://localhost:1150/Katalog";

Driver driver;

driver = (Driver) Class.forName("JData2_0.sql.$Driver").newInstance();

polaczenie = driver.connect(data, new Properties());

}

gdzie localhost reprezentuje adres internetowy (URL) komputera.

(13)

Przykład 4. – Wyświetlanie danych (tytułów) z tabeli Tytul w trybie graficznym import java.sql.*;

import javax.swing.*;

import java.util.*;

import java.io.*;

import java.lang.*;

import java.awt.event.*;

class Okno extends JFrame

{ JLabel elista= new JLabel ("Tytuly ksiazek");

JComboBox lista;

Okno(Vector vector) {

super("Ramka 15");

lista=new JComboBox(vector);

setSize(300,250);

setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

JPanel panel= new JPanel();

panel.add(elista);

panel.add(lista);

setContentPane(panel);

} }

public class baza9_0 { String data, sql;

Connection polaczenie;

Statement polecenie;

ResultSet krotka;

void polaczenie_z_baza() throws Exception { data="jdbc:odbc:katalog";

Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");

polaczenie=DriverManager.getConnection(data,"","");

}

(14)

public Vector pobierz_tytuly() throws Exception

{Statement polecenie= polaczenie.createStatement();

String sql="SELECT * FROM Tytul ORDER BY tytul;";

ResultSet krotka= polecenie.executeQuery(sql);

Vector vector= new Vector(10,5);

while(krotka.next())

{ String tytul = new String(krotka.getString("tytul")+' '+

krotka.getString("autor")+' '+

krotka.getInt("ISBN"));

vector.addElement(tytul);

}

vector.trimToSize();

polecenie.close();

return vector;

}

static public void main(String arg[]) { baza9_0 baza = new baza9_0();

try

{ baza.polaczenie_z_baza();

Okno okno = new Okno(baza.pobierz_tytuly());

okno.show();

}catch(Exception e)

{System.out.println("Blad bazy "+e);

} } }

Cytaty

Powiązane dokumenty

Z kilku tabel można zrobić jedną (więcej możliwości). Mogą być wartości

Do łączenia danych przechowywanych w różnych tabelach wprowadzono klucze obce, które są kolumną lub grupą kolumn tabeli, która przyjmuje swoje wartości z tej samej

 JDBC-ODBC Brige – jest to dostęp do bazy danych po przez sterowniki ODBC....

Tekst Maska (tylko pierwsza litera wielka) Rozmiar 20 (miejscowość może się powtórzyć) Tekst. Maska (wszystkie wielkie litery) Rozmiar 40 (nazwa nie może się

Tekst Maska (tylko pierwsza litera wielka) Rozmiar 20 (kontynent może się powtórzyć) Tekst. Maska (wszystkie wielkie litery) Rozmiar 40 (państwo nie może się

Tekst Kod wymagany Telefon nie (dobrać rozmiar do ilości znaków) kod morze się powtórzyć a telefon nie). Liczba Format procentowy Nie wymagane

Utwórz nową bazę danych i nadaj jej nazwę: zaliczenie – nr.mdb gdzie nr to twój numer w dzienniku. Utwórz tabele o nazwach kontrahenci i obroty zawierające następujące

col_name data_type [NOT NULL | NULL] [DEFAULT default_value]. [AUTO_INCREMENT] [UNIQUE [KEY] |