Java Database Connectivity-API (JDBC) · 2004-05-21 · Standard-Typemapping zwischen SQL und JAVA...

22
Pratikum SWE 2 © M. Löberbauer, T. Kotzmann, H. Prähofer 1 Java Database Connectivity-API (JDBC) Motivation Design Grundlagen Typen Metadaten Transaktionen

Transcript of Java Database Connectivity-API (JDBC) · 2004-05-21 · Standard-Typemapping zwischen SQL und JAVA...

Page 1: Java Database Connectivity-API (JDBC) · 2004-05-21 · Standard-Typemapping zwischen SQL und JAVA SMALLINT short INTEGER int TIMESTAMP java.sql.Timestamp TIME java.sql.Time DATE

Pratikum SWE 2 © M. Löberbauer, T. Kotzmann, H. Prähofer 1�������������� ��������������

���������������������������

Java Database Connectivity-API (JDBC)

MotivationDesignGrundlagenTypenMetadatenTransaktionen

Page 2: Java Database Connectivity-API (JDBC) · 2004-05-21 · Standard-Typemapping zwischen SQL und JAVA SMALLINT short INTEGER int TIMESTAMP java.sql.Timestamp TIME java.sql.Time DATE

Pratikum SWE 2 © M. Löberbauer, T. Kotzmann, H. Prähofer 2�������������� ��������������

���������������������������

Motivation

� Problem: Zugriff auf ein DBMS ist Herstellerabhängig

AnwendungMySQL API

MySQL

DB2DB2 API

Anwendung

Oracle APIOracleAnwendung

Page 3: Java Database Connectivity-API (JDBC) · 2004-05-21 · Standard-Typemapping zwischen SQL und JAVA SMALLINT short INTEGER int TIMESTAMP java.sql.Timestamp TIME java.sql.Time DATE

Pratikum SWE 2 © M. Löberbauer, T. Kotzmann, H. Prähofer 3�������������� ��������������

���������������������������

Motivation

� Lösung: Zwischenschicht

MySQL APIMySQL

DB2DB2 API

Oracle APIOracle

Anwendung JDBC API

JDB

C

JDBC Treiber

Page 4: Java Database Connectivity-API (JDBC) · 2004-05-21 · Standard-Typemapping zwischen SQL und JAVA SMALLINT short INTEGER int TIMESTAMP java.sql.Timestamp TIME java.sql.Time DATE

Pratikum SWE 2 © M. Löberbauer, T. Kotzmann, H. Prähofer 4�������������� ��������������

���������������������������

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 �

Page 5: Java Database Connectivity-API (JDBC) · 2004-05-21 · Standard-Typemapping zwischen SQL und JAVA SMALLINT short INTEGER int TIMESTAMP java.sql.Timestamp TIME java.sql.Time DATE

Pratikum SWE 2 © M. Löberbauer, T. Kotzmann, H. Prähofer 5�������������� ��������������

���������������������������

Design

Java Anwendung

JDBC-Treibermanager

JDBC/ODBC-Brücke

ODBC-Treiber

Datenbank

Datenbank

JDBC-Treiber

Page 6: Java Database Connectivity-API (JDBC) · 2004-05-21 · Standard-Typemapping zwischen SQL und JAVA SMALLINT short INTEGER int TIMESTAMP java.sql.Timestamp TIME java.sql.Time DATE

Pratikum SWE 2 © M. Löberbauer, T. Kotzmann, H. Prähofer 6�������������� ��������������

���������������������������

Treiber

� Typ 1: JDBC/ODBC-Brücke• ODBC ist sehr weit verbreitet �

• Leistung �• Wartung �

• Testen, Experimentieren

• kein JDBC Treiber verfügbar• Windows Plattformen

� Typ 2: Partial Java Driver• konvertiert JDBC Aufruf in DB abhängigen API Aufruf

• schnell, weil API Aufruf kompiliert ist �• DB + OS abhängig �

• Nutzer braucht plattformabhängige API �

JDBC-Anwendung

ODBC DB

Client Server

ODBC

DB

Server

JDBC-Anw.

API

Client

Page 7: Java Database Connectivity-API (JDBC) · 2004-05-21 · Standard-Typemapping zwischen SQL und JAVA SMALLINT short INTEGER int TIMESTAMP java.sql.Timestamp TIME java.sql.Time DATE

Pratikum SWE 2 © M. Löberbauer, T. Kotzmann, H. Prähofer 7�������������� ��������������

���������������������������

Treiber

� Typ 3: Reiner Java Treiber zu Middleware• Keine plattformabhängigen Treiber am Client �

• DB unabhängig �• Flexibel, mehrere DB möglich �

• DB abhängiger Code in Middleware

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

JDBC-Anw.

MW DB

Client Server Server

JDBC-Anw. DB

Client Server

Page 8: Java Database Connectivity-API (JDBC) · 2004-05-21 · Standard-Typemapping zwischen SQL und JAVA SMALLINT short INTEGER int TIMESTAMP java.sql.Timestamp TIME java.sql.Time DATE

Pratikum SWE 2 © M. Löberbauer, T. Kotzmann, H. Prähofer 8�������������� ��������������

���������������������������

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":- �������� �� ���������� �� ������������������� �� ���

� ���������� ���!�"� ��� �# �� $%�!��&

$ '�!���(� )!���������������� �� ����* ���!�����

Page 9: Java Database Connectivity-API (JDBC) · 2004-05-21 · Standard-Typemapping zwischen SQL und JAVA SMALLINT short INTEGER int TIMESTAMP java.sql.Timestamp TIME java.sql.Time DATE

Pratikum SWE 2 © M. Löberbauer, T. Kotzmann, H. Prähofer 9�������������� ��������������

���������������������������

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>

Page 10: Java Database Connectivity-API (JDBC) · 2004-05-21 · Standard-Typemapping zwischen SQL und JAVA SMALLINT short INTEGER int TIMESTAMP java.sql.Timestamp TIME java.sql.Time DATE

Pratikum SWE 2 © M. Löberbauer, T. Kotzmann, H. Prähofer 10�������������� ��������������

���������������������������

Grundlagen: DriverManager

� DriverManager• Verwaltet registrierte Treiber

• Aufbau von Verbindungen+�'����������� ��++�'����������� ��++�'����������� ��++�'����������� ��+ , ���, ���, ���, ����� ��+�� ��+�� ��+�� ��+ ,� ��,� ��,� ��,� ���� ��+�� ��+�� ��+�� ��+ �!��*� ���!��*� ���!��*� ���!��*� ��

- Liefert eine Connection zu der gegebenen url wenn ein passender Treiber registriert ist.

-.�/+��� � �����# �� ��.-'�!���(� )!���������������� �� ����* ���!�����-.�0�(� � ���� ��!���!�1� ����,�+�.-'�������� ����2�� �� 3!�!+ �+�'���������, ���,� ���!����

Page 11: Java Database Connectivity-API (JDBC) · 2004-05-21 · Standard-Typemapping zwischen SQL und JAVA SMALLINT short INTEGER int TIMESTAMP java.sql.Timestamp TIME java.sql.Time DATE

Pratikum SWE 2 © M. Löberbauer, T. Kotzmann, H. Prähofer 11�������������� ��������������

���������������������������

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.

� � �! ���!����� �! ��!������ ��+�����

- Erzeugt Statements welche von der Datenbank vorkompiliert werden können.

��!������!��2������ !���!��������!��4�,�5��!��� )�6/# )#7�����80956���:�!���:����

� �! ���!��� ��!����!��2������ �! ��!����� )�6/# )#7�����80956���:;��:���������!��4�,�5��!����

Page 12: Java Database Connectivity-API (JDBC) · 2004-05-21 · Standard-Typemapping zwischen SQL und JAVA SMALLINT short INTEGER int TIMESTAMP java.sql.Timestamp TIME java.sql.Time DATE

Pratikum SWE 2 © M. Löberbauer, T. Kotzmann, H. Prähofer 12�������������� ��������������

���������������������������

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 �,�� wenn wenn die Anweisung keine Ergebnismenge hatte.

Page 13: Java Database Connectivity-API (JDBC) · 2004-05-21 · Standard-Typemapping zwischen SQL und JAVA SMALLINT short INTEGER int TIMESTAMP java.sql.Timestamp TIME java.sql.Time DATE

Pratikum SWE 2 © M. Löberbauer, T. Kotzmann, H. Prähofer 13�������������� ��������������

���������������������������

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������ �! ��!����� )�6/# )#7�����80956���?������!������ ��+�@����!��������!��4�,�5��!������!������ ��+�@���;��A�����!��4�,�5��!����

Page 14: Java Database Connectivity-API (JDBC) · 2004-05-21 · Standard-Typemapping zwischen SQL und JAVA SMALLINT short INTEGER int TIMESTAMP java.sql.Timestamp TIME java.sql.Time DATE

Pratikum SWE 2 © M. Löberbauer, T. Kotzmann, H. Prähofer 14�������������� ��������������

���������������������������

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

Page 15: Java Database Connectivity-API (JDBC) · 2004-05-21 · Standard-Typemapping zwischen SQL und JAVA SMALLINT short INTEGER int TIMESTAMP java.sql.Timestamp TIME java.sql.Time DATE

Pratikum SWE 2 © M. Löberbauer, T. Kotzmann, H. Prähofer 15�������������� ��������������

���������������������������

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.

� =#��>�+�=#��>�������!���

� =#��>�+�=#��>��� ��+���!���)!�

� ����(���'��,���� ��+���!���)!�

.........27Kurt225Max1AgeNameNr

�4���

+��� ��+�G��2>�HI+��� ��+��)!���2>�3!4(���'��,���) ���2>�@

Page 16: Java Database Connectivity-API (JDBC) · 2004-05-21 · Standard-Typemapping zwischen SQL und JAVA SMALLINT short INTEGER int TIMESTAMP java.sql.Timestamp TIME java.sql.Time DATE

Pratikum SWE 2 © M. Löberbauer, T. Kotzmann, H. Prähofer 16�������������� ��������������

���������������������������

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

Page 17: Java Database Connectivity-API (JDBC) · 2004-05-21 · Standard-Typemapping zwischen SQL und JAVA SMALLINT short INTEGER int TIMESTAMP java.sql.Timestamp TIME java.sql.Time DATE

Pratikum SWE 2 © M. Löberbauer, T. Kotzmann, H. Prähofer 17�������������� ��������������

���������������������������

Grundlagen: Beispiel ResultSet

� Wie viele Zeilen hat ein ResultSet?

'������������������!������!��2������ !���!������/�,����� �,���2���!��4�,�<, ����696'#����������� �*0�,���

�,����!����� �*0�,���2� �,���+�/�*��� �,����(� J� �����

--�3���/�,�����! ����*���*���*���*��� � �,����4�����B���

D

Page 18: Java Database Connectivity-API (JDBC) · 2004-05-21 · Standard-Typemapping zwischen SQL und JAVA SMALLINT short INTEGER int TIMESTAMP java.sql.Timestamp TIME java.sql.Time DATE

Pratikum SWE 2 © M. Löberbauer, T. Kotzmann, H. Prähofer 18�������������� ��������������

���������������������������

Typen

� Standard-Typemapping zwischen SQL und JAVA

shortSMALLINT

intINTEGER

java.sql.TimestampTIMESTAMP

java.sql.Time TIME

java.sql.DateDATE

byte[] BINARY, VARBINARY, LONGVARBINARY

doubleFLOAT, DOUBLE

floatREAL

longBIGINT

byteTINYINT

booleanBIT

java.math.BigDecimal NUMERIC, DECIMAL

StringCHAR, VARCHAR, LONGVARCHAR

Java Type SQL Type

Page 19: Java Database Connectivity-API (JDBC) · 2004-05-21 · Standard-Typemapping zwischen SQL und JAVA SMALLINT short INTEGER int TIMESTAMP java.sql.Timestamp TIME java.sql.Time DATE

Pratikum SWE 2 © M. Löberbauer, T. Kotzmann, H. Prähofer 19�������������� ��������������

���������������������������

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"

Page 20: Java Database Connectivity-API (JDBC) · 2004-05-21 · Standard-Typemapping zwischen SQL und JAVA SMALLINT short INTEGER int TIMESTAMP java.sql.Timestamp TIME java.sql.Time DATE

Pratikum SWE 2 © M. Löberbauer, T. Kotzmann, H. Prähofer 20�������������� ��������������

���������������������������

Metadaten

� ResultSetMetaData:� =/�,����>�+�3�!�!�!��

� ����+�'��,�'�,����

- Anzahl der Spalten im ResultSet.

� �� ��+�+�'��,�)!���� ���,��

� ����+�'��,�#������ ���,��

� �� ��+ +�'��,�#��)!���� ���,��

� �� ��+ +�#!��)!���� ���,��

� ���

...

...

...

...DIMag.Title

.........27Kurt225Max1AgeNameNr

+�'��,�'�,�����2>�G+�'��,�)!�@��2>��) �+�'��,�#���G��2>�K+�'��,�#��)!�G��2>������+�#!��)!�H��2>��,� ��

.........27Kurt225Max1AgeNameNr

�696'#�) ��)!��0+J7/3�,� ��

Page 21: Java Database Connectivity-API (JDBC) · 2004-05-21 · Standard-Typemapping zwischen SQL und JAVA SMALLINT short INTEGER int TIMESTAMP java.sql.Timestamp TIME java.sql.Time DATE

Pratikum SWE 2 © M. Löberbauer, T. Kotzmann, H. Prähofer 21�������������� ��������������

���������������������������

Transaktionen

� Auto Commit: Jede Anweisung ist eine abgeschlossene Transaktion.• Abfragen:

$ ='��������>�+�0,��'�����

• Setzen:$ ='��������>���0,��'���������

� Abschliessen einer Transaktion: � ='��������>�������

� Rücksetzen im Fehlerfall (z.B.: SQLException): � ='��������>� ����!�1��

'����������������� ��B������0,��'����(!������!������!��2������ !���!��������!��4�,�5��!��� )�6/#���������!��4�,�5��!��� )�6/#���������!��4�,�5��!���5��0#6������������������

D��!������<964���������B����� ����!�1����D

Page 22: Java Database Connectivity-API (JDBC) · 2004-05-21 · Standard-Typemapping zwischen SQL und JAVA SMALLINT short INTEGER int TIMESTAMP java.sql.Timestamp TIME java.sql.Time DATE

Pratikum SWE 2 © M. Löberbauer, T. Kotzmann, H. Prähofer 22�������������� ��������������

���������������������������

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