Post on 21-May-2020
Pratikum SWE 2 © M. Löberbauer, T. Kotzmann, H. Prähofer 1�������������� ��������������
���������������������������
Java Database Connectivity-API (JDBC)
MotivationDesignGrundlagenTypenMetadatenTransaktionen
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
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
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 �
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
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
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
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":- �������� �� ���������� �� ������������������� �� ���
� ���������� ���!�"� ��� �# �� $%�!��&
$ '�!���(� )!���������������� �� ����* ���!�����
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>
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!�!+ �+�'���������, ���,� ���!����
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��!����
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.
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��!����
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
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>�@
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
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
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
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"
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�,� ��
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
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