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