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-Spezifische- Schnittstellen. 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 Web- Browser 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 Connection- String 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 C- Programme 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 Beispiel- Programme. 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 zugrie Auf dieser Abbildung sehen Sie, wie man SQL-Anweisungen direkt in seinen Quelle-Code einer Applik 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 eingetr 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. Um solche Programme ablaufen lassen zu können, werden diese Quelldateien durch einen sogenannten
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 seh 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 relationa Eine System Bibliothek mit dem Namen System.Data.dll enthält dabei die ADO.NET Klassen, die für Zum Beispiel bietet die Bibliothek System.Data.SqlClient eine Möglichkeit auf SQL Server zugriefen Ein entsprechendes Beispielprogramm in C# finden Sie unter: https://msdn.microsoft.com/de-de/library/d 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 kom In diesem Fall liefert der jeweilige Hersteller des DBMS sowohl eine API-Beschreibung als auch eine B Diese Art der Schnittstellen sind optimal auf das DBMS abgestimmt und erlauben eine sehr effizienten Z Siehe auch: Oracle Call Level Interface : http://www.oracle.com/technetwork/database/features/oci/index-090945 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 I 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. Alterna 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