Połączenia między bazami danych i programem w języku Java – część 1
1. Java 5.0
2. JDBC (Java Database Connectivity) - połączenia z relacyjnymi
bazami danych
. Wprowadzenie2.1. Cztery 2.1. Cztery 2.1. Cztery
2.1. Cztery kategorie sterowników JDBC kategorie sterowników JDBC kategorie sterowników JDBC kategorie sterowników JDBC
1. JDBC-ODBC bridge plus ODBCdriver (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
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
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
dBase XML
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
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
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
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
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)
• 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)
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();
2.3. Przykłady zastosowania sterowników
JDBC-ODBCPrzykł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);
} } }
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();
}
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);
} }
}
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+");");
} }
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());
} } }
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: "); } }
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(); } }
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(); }
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);}
} }
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
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.
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) { //………
}
//………
}