21_8335_600-RDBM-Schnittstellen - Offene

Werbung
Das diesem Dokument zugrundeliegende Vorhaben wurde mit
Mitteln des Bundesministeriums für Bildung und Forschung
unter dem Förderkennzeichen 16OH21005 gefördert.
Die Verantwortung für den Inhalt dieser Veröffentlichung liegt
beim Autor/bei der Autorin.
In diesem Abschnitten wollen wir uns mit den
wichtigsten Schnittstellen beschäftigen, die bei
der Entwicklung einer Datenbank-Software in
der Praxis eine Rolle spielen.
1
In diesem Abschnitt wollen wir uns mit den
möglichen Schnittstellen beschäftigen,
über die man auf Datenbanken zugreifen
kann.
Ziel ist es einen Überblick zu erhalten und
die wichtigsten Merkmale kennen zu
lernen.
Die wichtigsten Schnittstellen sind in der
Abbildung aufgelistet. Diese werden wir
uns als nächstes näher ansehen.
2
In dieser Abbildung sehen Sie eine grobe
Einteilung und Klassifizierung der
einzelnen Schnittstellen.
Zum einen sehen Sie die Einteilung in
Standard- oder Hersteller-SpezifischeSchnittstellen.
Zum anderen sehen Sie die Einteilung nach
Art der Verwendung. Also, ob die
Schnittstelle für eine bestimmte
Programmiersprache bereitgestellt wird, in
der eine Anwendung implementiert
werden kann, oder ob es eine Schnittstelle
ist, bei der direkt SQL Befehle ausgeführt
werden können.
3
Was genau unter den einzelnen Schnittstellen zu
verstehen ist, werden wir uns nun näher
ansehen.
Beginnen wir mit den wichtigsten
Schnittstellen.
Auf dieser Abbildung sind die Schnittstellen
zu sehen, die in der Praxis am meisten
eingesetzt werden.
Hierzu gehören:
• JDBC .. Für JAVA Programme
• ODBC .. Für C Programme
• SQL Interpreter.. Um SQL Befehl direkt
ausführen zu können
4
Beginnen wir mit dem SQL Interpreter.
Ein SQL-Interpreter ist zunächst einmal ein
Software-Programm. Es bietet einem
Anwender eine Schnittstelle, die es
erlaubt, dass SQL Anweisungen
eingegeben und ausgeführt werden
können.
Zum Beispiel stellt SQL Server ein
Programm „sqlcmd.exe“ zur Verfügung.
Diese Programm kann z.B. in einer
„Command-Box“ gestartet werden, um
• Entweder ein SQL Command einzugeben
5
•
und ausführen zu lassen
Oder man kann eine Datei angeben, welche
SQL Anweisungen (SQL-Batch-Script) enthält.
Diese SQL Anweisungen werden dann
ausgeführt. Im Fehlerfall, wird die Ausführung
des Script abgebrochen.
Typische Anwendungsfälle für das Ausführen
dieser SQL-Batch-Scripts sind
• Scripts für Wartungszwecken
• Scripts zum Testen von Datenbanken bzgl.
Schema und/oder Inhalt
• Scripts für Performance Tests
• Scripts zur Installation / De-Installation von
Datenbank-Schemas
• Scripts zum Update von Datenbank Schemas
In dieser Abbildung sehen Sie als Beispiel
die Optionen die beim Aufruf des SQL
Server Interpreters „sqlcmd.exe“
angegeben werden können.
Die wichtigsten Optionen sind durch die
Pfeile markiert. Im einzelnen sind dies:
• -U für die Authentifizierung des Datenbank
Users
• -i Eingabedatei
• -o Ausgabedatei
Wird keine Eingabedatei angegeben, so
erhält man einen Command-Prompt und
6
kann dann SQL Anweisungen eingeben.
Als eine besondere Art von SQL Interpreter
wird auch durch die H2 Datenbank zur
Verfügung gestellt.
Hierbei handelt es sich nicht um eine
Kommando-Box, sondern um eine WebBrowser basierte Schnittstelle.
Wie Sie in der Abbildung sehen, erhält der
Anwender eine Möglichkeit über einen
Web-Browser eine SQL-Anweisung aus
zu führen und das Ergebnis wird ebenfalls
im
Browser angezeigt.
7
Hier sehen Sie nochmals aufgelistet, die
typischen Einsatzgebiete für SQL –
Interpreter.
Das wohl wichtigste Einsatzgebiet ist das
Ausführen von SQL Ad Hoc Abfragen zu
Test- und Wartungszwecken.
8
Als nächstes wollen wir uns näher mit der
JDBC Schnittstelle beschäftigen.
Wie bereits erwähnt, handelt es sich um
eine Schnittstelle, die es erlaubt aus JAVA
Programmen heraus, auf Datenbanken
zuzugreifen.
Hierzu ist es notwendig, einen
entsprechenden JDBC Driver in das JAVA
Projekt ( Build-Path und CLASSPATH) mit
aufzunehmen, um die notwenige JAVA
Klassen
für die Ansteuerung der Datenbank
verwenden zu können .
9
Wie Sie in der Abbildung sehen, handelt es sich
bei einem JDBC Driver um ein Java Archive
File ( JAR).
Obwohl die Schnittstelle selbst standardisiert ist,
ist die Erzeugung der Objekte bei den
einzelnen Herstellen unterschiedlich.
Daher ist es notwendig, sich den JDBC Driver
von der jeweiligen Web-Seite des
Datenbankhersteller herunterzuladen und
einzubinden.
In dieser Abbildung sehen Sie die
wichtigsten Informationen für die
Verwendung des H2Database JDBC
Drivers.
•
•
•
Das JAR File muss in den Build-Path
bzw. in den Class-Path eingebunden
werden.
Den Namen des JDBC-Drivers
URL für den Verbindungsaufbau zu einer
H2 Datenbank
10
In dieser Abbildung sehen Sie die
wichtigsten Informationen für die
Verwendung des SQL Server JDBC
Drivers
Wie Sie sehen ist der größte Unterschied
bei der Syntax der URL für den
Verbindungsaufbau.
11
Abschließend sehen wir uns noch ein
Beispielprogramm für den Zugriff auf eine
SQL Server Datenbank.
Den Quellcode wurde einer offiziellen Quelle
der Firma Microsoft entnommen. Den
entsprechenden Link finden Sie am Ende
aufgelistet.
Zu (1)
Zunächst müssen wir das Java Standard
Package für SQL importieren. Dies enthält
die Schnittstellen-Definitionen für den SQL
Zugriff.
12
Zu (2)
Nun müssen wir einen sogenannten ConnectionString erstellen. Dieser Java-String enthält
eine URL, die angibt
• Auf welche SQL Server Datenbank wir
zugreifen wollen  in diesem Fall „localhost“ und
die Standard Portnummer
• Auf welche Datenbank wir zugriefen wollen  in
diesem Fall ist der Name der Datenbank
„AdventureWorks“
• Und mit welchen Datenbank Benutzer/ Passwort wir
zugreifen wollen  in diesem Fall „UserName“
Zu (3)
Um eine Verbindung aufbauen zu können, müssen wir
eine Instanz des SQL Server Driver erstellen.
Anschließend können wir über die Klassen
„DriverManager“ eine Verbindung zur Datenbank
aufbauen. Hierzu übergeben wir den entsprechenden
Connection String ( URL ) aus Teil (2).
Nun haben wir ein Verbindungsobjekt „con“ . Was wir
damit tun können, sehen wir uns als nächstes an.
Quelle.
•
SQL Server  https://msdn.microsoft.com/dede/library/aa342339(v=sql.110).aspx
Zu (3)
Nachdem wir eine Datenbank-Connection
erstellt haben, können wir SQL
Anweisungen ausführen.
Zu(4)
Im einfachsten Fall wollen wie eine SELECT
Anweisung ausführen.
Hierzu sehen wir in Schritt (4), das wir diese
Anweisung einfach als JAVA String
ablegen können.
Zu(5)
13
In lassen wir für ein Statement Object erzeugen
und verwenden hierzu das Connection Object,
auf der wir auch die Anweisung ausführen
lassen wollen
Zu(6)
Im die Anweisung aus zu führen, verwenden wir
unser „Statement-Object“ und übergeben in
der Methode „executeQuery()“ den
entsprechende Java String, welche die SQL
Anweisung ( in unserem Fall das SELECT
Statement enthält.
Als Return-Wert der Methode „executeQuery()“
erhalten wir ein Objekt der Klasse ResultSet,
welches die Ergebnismenge beinhaltet.
Zu(7)
Das Auswerten der Ergebnismenge erfolgt
dadurch, dass wir durch die einzelnen Elemente
der Ergebnismenge iterieren: Dies erfolgt mittels
der Methode „next()“
Bei der Methode „rs.getString() „ kann wie in dem
Beispiel ein Index der Spalten-Nummer ( Start
mit 0) = 1. Spalte) oder auch der Name der
Spalte angegeben werden.
Hinweise:
Sieh auch : JDBC Api Spezifikation 
http://docs.oracle.com/javase/7/docs/technotes/guides/
jdbc/
Zum Abschluss des Thema JDBC hier noch
eine kleine Tabelle.
Wie wir ja wissen, werden datenbank-intern
eigene Datentypen wie VARCHAR etc.
verwendet.
Somit stellt sich die Frage: „Wie werden die
datenbank-internen Datentypen auf die
Datentypen der jeweiligen Sprache ( hier
JAVA) abgebildet.
Für JAVA und JDBC ist diese Abbildung in
14
der Tabelle aufgeführt.
Quelle: http://www.servicearchitecture.com/articles/database/mapping_sq
l_and_java_data_types.html
Die Tabelle selbst ist aber nicht vollständig und
zeigt nur die am meisten verwendeten
Datentypen.
Eine vollständige Beschreibung der Abbildung
der Datentypen ist bei dem jeweiligen DB
Hersteller zu finden.
Siehe auch:
• Oracle 
https://docs.oracle.com/cd/B19306_01/java.102/b14
188/datamap.htm
• SQL SERVER  https://msdn.microsoft.com/dede/library/ms378878(v=sql.110).aspx
• H2 
http://www.h2database.com/html/datatypes.html
Nachdem wir uns etwas ausführlicher mit
dem Thema JAVA und JDBC beschäftig
haben, wenden wir uns der ODBC
Schnittstelle zu.
Wie Sie in der Abbildung sehen, ist diese
dem JDBC Ansatz sehr ähnlich.
In diesem Fall handelt es sich bei ODBC
um eine binäre Schnittstelle.
Dies bedeutet:
•
•
ODBC ist eine Bibliothek im binär Format.
 Maschinen Code
Sie ist somit Plattform spezifisch. Dies
15
bedeutet, dass wir für Windows und Linux jeweils
unterschiedliche Bibliotheken benötigen. Dies gilt
entsprechend auch für ein 32 Bit oder 64 Bit
Rechner Architektur.
Siehe auch
• ODBC Reference Microsoft 
https://msdn.microsoft.com/enus/library/ms714177(v=vs.85).aspx
Um die Wichtigkeit von ODBC zu verstehen,
schauen wir uns kurz die Herkunft von
ODBC an.
Treibende Kraft hinter ODBC war Microsoft.
Dort hat man die Notwenigkeit gesehen,
eine Standardschnittstelle für CProgramme zu entwickeln, um auf
Datenbestände
zugreifen zu können. Diese Schnittstellt hat
sich schnell zu einem De-Facto Standard
entwickelt, zumal X/OPEN und ISO/IEC
mitgearbeitet haben und andere Hersteller
auch diesen Standard implementiert haben.
16
Für den praktischen Einsatz bedeutet dies, dass
man sich die jeweiligen ODBC Driver für die
entsprechende Plattform von der Hersteller
Web-Seite herunter laden muss.
Dort findet man auch entsprechende BeispielProgramme.
Hinweis:
• Code Sample und API Reference ist zu finden
unter https://msdn.microsoft.com/enus/library/ms714177(v=vs.85).aspx
PS:
Wir ersparen uns hier ein Beispiel C-Programm, da
ohne Kenntnisse der Programmiersprache C ein
Code-Beispiel keinen Sinn ergibt. Zumal Kenntnisse
der
Programmiersprache C für diesen Grundlagenkurs
nicht zwingend notwendig sind.
Wenden wir uns nun einer weiteren Möglichkeit zu, um von Programmen aus, auf eine Datenbank zugrief
Auf dieser Abbildung sehen Sie, wie man SQL-Anweisungen direkt in seinen Quelle-Code einer Applikat
Dies bedeutet, dass zum Beispiel, dass in einer Quell-Datei zwei Programmiersprachen zu finden sind.
Neben dem Quellcode z.B. in der Programmiersprache C können in den Code SQL Anweisungen eingetra
Die SQL Anweisungen beginnen dabei immer mit den Schlüsselworten „SQL EXEC“.
Beispiel:
SQL EXEC select * from foo where id = 123
Ein entsprechendes Beispiel-Programm finden sie unter: https://docs.oracle.com/cd/B10501_01/appdev.9
Um solche Programme ablaufen lassen zu können, werden diese Quelldateien durch einen sogenannten P
Unter Windows bietet die Firma Microsoft ein sogenannte ADO Schnittstelle an.
Die Abkürzung ADO steht dabei für Advanced Data Object. Aus der Historie heraus findet man auch sehr
Die ADO Schnittstelle wird dabei für verschiedene Programmiersprachen wie:
• VisualBasic
• C ++
• C#
angeboten.
ADO.Net bietet dabei eine Schnittstelle an, die sowohl den Zugriff auf relationale als auch nicht relational
Eine System Bibliothek mit dem Namen „System.Data.dll“ enthält dabei die ADO.NET Klassen, die für d
Zum Beispiel bietet die Bibliothek „System.Data.SqlClient“ eine Möglichkeit auf SQL Server zugriefen z
Ein entsprechendes Beispielprogramm in C# finden Sie unter: https://msdn.microsoft.com/de-de/library/dw
Siehe Auch:
• Microsoft ADO.NET: https://msdn.microsoft.com/en-us/library/h43ks021(v=vs.110).aspx
In dieser Abbildung sehen Sie eine weiteren Ansatz, bei dem herstellerspezifische APIs zum Einsatz komm
In diesem Fall liefert der jeweilige Hersteller des DBMS sowohl eine API-Beschreibung als auch eine Bi
Diese Art der Schnittstellen sind optimal auf das DBMS abgestimmt und erlauben eine sehr effizienten Zu
Siehe auch:
• Oracle Call Level Interface : http://www.oracle.com/technetwork/database/features/oci/index-090945.h
• Microsoft SQL Server Native Client: https://msdn.microsoft.com/en-us/library/cc280510.aspx
In dieser Abbildung sehen Sie die Namen der herstellerspezifischen API von einigen Herstellern.
Oracle stellt eine sogenannte OCI Schnittstelle bereit. Wobei das Akronym OCI für „Oracle Call Level In
Für Postgres steht eine Bibliothek mit dem Namen „libpq“ zur Verfügung.
Für den Zugriff auf Microsoft SQL Server wird hierzu die Schnittstelle „OLE DB Provider“ angeboten.
In der Regel werden die jeweiligen Bibliotheken bei der Installation eines DBMS mit installiert. Alternati
Im Falle von Microsoft SQL Server suchen Sie nach „SQL Server Native Client“
Siehe auch:
• Microsoft: https://msdn.microsoft.com/de-de/library/ms130978(v=sql.120).aspx
Herunterladen