JDBC - SSW

Werbung
Java Database Connectivity-API (JDBC)
Motivation
Design
Grundlagen
Typen
Metadaten
Transaktionen
Pratikum SWE 2
© M. Löberbauer, T. Kotzmann, H. Prähofer
1
Motivation
Problem: Zugriff auf ein DBMS ist Herstellerabhängig
Anwendung
Anwendung
Anwendung
MySQL API
MySQL
DB2 API
DB2
Oracle API
Pratikum SWE 2
Oracle
© M. Löberbauer, T. Kotzmann, H. Prähofer
2
Motivation
Lösung: Zwischenschicht
MySQL API
Anwendung JDBC API
JDBC
MySQL
DB2 API
DB2
Oracle API
Oracle
JDBC Treiber
Pratikum SWE 2
© M. Löberbauer, T. Kotzmann, H. Prähofer
3
Design
Entwicklung seit: 1995
Erster Ansatz: Java erweitern
Zweiter Anzatz: Treiber der Datenbankhersteller
Vorbild: ODBC
Unterschiede:
• ODBC wenige Befehle, viele Optionen
• JDBC viele einfache Methoden
• ODBC nutzt
-Zeiger
• Java kennt keine Zeiger
Flexibilität: JDBC erlaubt beliebige Zeichenfolgen
• Anpassung an Datenbank möglich.
- Optimierung
- Bindung
Pratikum SWE 2
© M. Löberbauer, T. Kotzmann, H. Prähofer
4
Design
Java Anwendung
JDBC-Treibermanager
JDBC/ODBC
-Brücke
JDBCTreiber
ODBCTreiber
Datenbank
Datenbank
Pratikum SWE 2
© M. Löberbauer, T. Kotzmann, H. Prähofer
5
Treiber
Typ 1: JDBC/ODBC-Brücke
•
•
•
•
•
•
ODBC ist sehr weit verbreitet
Leistung
Wartung
Testen, Experimentieren
kein JDBC Treiber verfügbar
Windows Plattformen
JDBCAnwendung
O
D
B
C
ODBC
DB
Client
Server
Typ 2: Partial Java Driver
•
•
•
•
konvertiert JDBC Aufruf in DB abhängigen API Aufruf
schnell, weil API Aufruf kompiliert ist
A
DB + OS abhängig
JDBCP
Nutzer braucht plattformabhängige API
Anw.
I
Client
Pratikum SWE 2
© M. Löberbauer, T. Kotzmann, H. Prähofer
DB
Server
6
Treiber
Typ 3: Reiner Java Treiber zu Middleware
•
•
•
•
Keine plattformabhängigen Treiber am Client
DB unabhängig
JDBCFlexibel, mehrere DB möglich
Anw.
DB abhängiger Code in Middleware
Client
M
W
DB
Server Server
Typ 4: Reiner Java Treiber direkt zur DB
•
•
•
•
JDBC in DB spezifische Netzwerkaufrufe verpackt
Schnell
Keine plattformabhängigen Treiber am Client
Client braucht für verschiedene DB verschiedene
Treiber
Pratikum SWE 2
JDBCAnw.
DB
Client
Server
© M. Löberbauer, T. Kotzmann, H. Prähofer
7
Treiberinstallation
Download
• http://servlet.java.sun.com/products/jdbc/drivers
• Datenbankhersteller
Installation
• Eintragen in den Klassenpfad
Registrieren
• Bei dem Programmstart durch Parameter:
-
java –Djdbc.drivers=com.mysql.jdbc.Driver <Programm>
• Setzen der Systemeigenschaft "jdbc.drivers":
-
! "
$ ' !
(
)!
#
$% !
&
*
Pratikum SWE 2
!
© M. Löberbauer, T. Kotzmann, H. Prähofer
8
Verbindungsaufbau
Verbindungsaufbau erfolgt mit
• Url zur Datenbank
• Benutername, Passwort
Datenbank Url
• jdbc:<Datenbanktreiber>:<treiberspezifische Angaben>
• MySql:
- jdbc:mysql://<host>:<port>/< Datenbankname>
• HSQLDB:
- jdbc:hsqldb:<Dateipfad>
Pratikum SWE 2
© M. Löberbauer, T. Kotzmann, H. Prähofer
9
Grundlagen: DriverManager
DriverManager
• Verwaltet registrierte Treiber
• Aufbau von Verbindungen
+
'
+ ,
+ ,
+
!
*
- Liefert eine Connection zu der gegebenen url wenn ein passender Treiber
registriert ist.
-. / +
' !
(
-. 0 (
'
#
.-
)!
!
2
! 1
3! !+
Pratikum SWE 2
+
*
, + .'
!
,
,
© M. Löberbauer, T. Kotzmann, H. Prähofer
!
10
Grundlagen: Connection
Connection: Verwaltet die Verbindung (Session) zu einer Datenbank.
- Schließen der Verbindung
- Bestätigen alle bisher vorgenommenen Änderungen, standard ist auto-commit
!
!
!
- Erzeugt ein Statement mit dem SQL-Statements an die Datenbank
abgegeben werden können.
!
!
4
,
!
5
!
2
!
!
) 6/#
!
!
)#7
!
80956
!
: !
:
+
- Erzeugt Statements welche von der Datenbank vorkompiliert werden können.
!
! 2
!
4
!
!
,
5
!
!
) 6/#
)#7
80956
:;
:
!
Pratikum SWE 2
© M. Löberbauer, T. Kotzmann, H. Prähofer
11
Grundlagen: Statement
Statement:
/
,
4
,
<,
+
- Ausführen einer SQL Abfrage (SELECT)
4
,
5
!
+
- Ausführen eines Updates (UPDATE, INSERT, DELETE, CREATE).
- Rückgabewert zeigt die Anzahl der betroffenen Zeilen.
!
4
,
+
- Ausführen einer beliebigen SQL Anweisung.
- Rückgabewert Zeigt an ob eine Ergebnismenge geliefert wurde.
+
5
!
' ,
- Anzahl der von der letzten Anweisung betroffenen Zeilen oder -1 wenn die
Anweisung keinen Zähler hatte.
/
,
+
/
,
- Ergebnismenge der letzten Abfrage oder ,
keine Ergebnismenge hatte.
Pratikum SWE 2
wenn wenn die Anweisung
© M. Löberbauer, T. Kotzmann, H. Prähofer
12
Grundlagen: PreparedStatement
PreparedStatement: Absetzen von vorkompilierten Statements.
=#
>
=#
> 4
- Setzen des Parameters an der Stelle n (1 .. m).
!
! !
- Löschen aller Parameterwerte.
/
,
4
,
<,
- Ausführen der vorkompilierten SQL Abfrage (SELECT)
4
,
5
!
- Ausführen des vorkompilierten Updates (UPDATE, INSERT, DELETE,
CREATE).
- Rückgabewert zeigt die Anzahl der betroffenen Zeilen.
!
! 2
!
!
4
!
!
4
!
,
,
!
+ @
5 !
+ @
5 !
!
!
!
;
) 6/#
)#7
80956
?
A
Pratikum SWE 2
© M. Löberbauer, T. Kotzmann, H. Prähofer
13
Grundlagen: Callable Statement
CallableStatement: Ausfüren von Datenbankprozeduren (SQL stored
procedures) über spezielle SQL strings:
•
•
•
•
Parameterlose Prozedur: B !
, C ! D
Prozedur: B !
, C ! E ? ?
FD
Funktion: B? 2 !
, C ! E ? ?
FD
Das setzen der Parameter erfolgt analog zu den PreparedStatements
Pratikum SWE 2
© M. Löberbauer, T. Kotzmann, H. Prähofer
14
Grundlagen: ResultSet
ResultSet: Ermöglicht das zeilenweise Abarbeiten der Ergebnistabelle.
!
4
- Anspringen der nächsten Zeile, begonnen wird vor der ersten Zeile.
- true solange noch eine gültige Zeile erreicht wurde.
=#
=#
+
+
(
'
> + =# >
> + =# >
(
' ,
!
+
+
+ G 2> HI
+ )!
2> 3!4
,
)
2> @
Pratikum SWE 2
!
!
)!
)!
4
Nr
1
2
...
Name
Max
Kurt
...
© M. Löberbauer, T. Kotzmann, H. Prähofer
Age
25
27
...
15
Grundlagen: ResultSet Fortsetzung
!
(
- Erste Zeile im ResultSet.
- true wenn eine gültige Zeile erreicht wurde.
(
J
- Vor die erste Zeile im ResultSet.
!
- Letzte Zeile im ResultSet.
- true wenn eine gültige Zeile erreicht wurde.
!(
9!
- Nach letzter Zeile im ResultSet.
!
!
,
*
- Eine Zeile anspringen
row > 0 ... von oben gezählt (1 erste Zeile, 2 zweite Zeile, ...)
row < 0 ... von unten gezählt (-1 letzte Zeile, -2 vorletzte Zeile, ...)
- true wenn eine gültige Zeile erreicht wurde.
+
/ *
- Nummer der aktuellen Zeile
Pratikum SWE 2
© M. Löberbauer, T. Kotzmann, H. Prähofer
16
Grundlagen: Beispiel ResultSet
Wie viele Zeilen hat ein ResultSet?
'
!
/ ,
!
,
*0
,
*0
,
-- 3
*
2
2
!
4
!
!
,
<,
696'#
,
!
,
2
(
/
,
+
/ *
J
,
,
!
4
B
D
Pratikum SWE 2
© M. Löberbauer, T. Kotzmann, H. Prähofer
17
Typen
Standard-Typemapping zwischen SQL und JAVA
SQL Type
Java Type
CHAR, VARCHAR, LONGVARCHAR
String
NUMERIC, DECIMAL
java.math.BigDecimal
BIT
boolean
TINYINT
byte
SMALLINT
short
INTEGER
int
BIGINT
long
REAL
float
FLOAT, DOUBLE
double
BINARY, VARBINARY, LONGVARBINARY
byte[]
DATE
java.sql.Date
TIME
java.sql.Time
TIMESTAMP
java.sql.Timestamp
Pratikum SWE 2
© M. Löberbauer, T. Kotzmann, H. Prähofer
18
Metadaten
Beschreibung der Struktur der Datenbank und deren Tabellen
DatabaseMetaData:
='
/ ,
> + 3
+ #!
+
/
!
,
+
! !
+
+
!
+EF
+
+
! ! !
'
,
!
+
+
! !
+
+
!
,
- catalog: Name des Katalogs
Tabellen ohne Katalog, ,
Katalognamen nicht brücksichtigen
- scheme: Schemaname
Tabellen ohne Schema, ,
nicht berücksichtigen
- table: Tabellenname
,
nicht berücksichtigen
- column: Spaltenname
,
nicht berücksichtigen
- types:
Typische namen: "TABLE", "VIEW", "SYSTEM TABLE", "GLOBAL TEMPORARY",
"LOCAL TEMPORARY", "ALIAS", "SYNONYM"
Pratikum SWE 2
© M. Löberbauer, T. Kotzmann, H. Prähofer
19
Metadaten
ResultSetMetaData:
=/
,
+
'
> + 3
, ' ,
Nr
1
2
...
! ! !
- Anzahl der Spalten im ResultSet.
+ +
+ '
+ +
+ +
+
+
+
+
+
'
'
'
'
#!
,
,
,
,
' , )!
, #
' , #
#!
)!
Name Title ...
Max Mag. ...
Kurt DI
...
...
...
,
,
)!
' ,
2> G
)!
@ 2> )
#
G 2> K
#
)!
G 2>
)!
H 2> ,
Pratikum SWE 2
,
,
696'# )
0+
J7/3 ,
Nr
1
2
...
)!
Name Age
Max 25
Kurt 27
...
...
© M. Löberbauer, T. Kotzmann, H. Prähofer
20
Age
25
27
...
Transaktionen
Auto Commit: Jede Anweisung ist eine abgeschlossene Transaktion.
• Abfragen:
$ ='
> +
0,
'
>
0,
'
• Setzen:
$ ='
Abschliessen einer Transaktion:
='
>
Rücksetzen im Fehlerfall (z.B.: SQLException):
='
>
! 1
'
B
0,
!
!
!
!
D
!
4
4
4
'
!
, 5
, 5
, 5
(!
2
!
!
!
<964
Pratikum SWE 2
!
) 6/#
) 6/#
5 0#6
B
!
! 1
D
© M. Löberbauer, T. Kotzmann, H. Prähofer
21
Zusammenfassung
Datenbankunabhängigkeit
• Zwischenschicht
• Treiberschnittstelle (mind. SQL 92)
- 4 Treiberarten:
JDBC -> ODBC
Teilweise Java
Nur Java zu einer Middleware
Nur Java zur Datenbank
• Einfachere Programmentwicklung
Beliebige SQL-Kommandos absetzbar
• Optimierung / Datenbankabhängigkeit
Pratikum SWE 2
© M. Löberbauer, T. Kotzmann, H. Prähofer
22
Herunterladen