11. Datenbankschnittstellen

Ähnliche Dokumente
11. Datenbankschnittstellen

Kapitel 9. Embedded SQL. Prof. Dr. Wolfgang Weber Vorlesung Datenbanken 1

Grundlagen von Datenbanken SS 2010 Kapitel 8: Datenbank-Einbettung in Programmiersprachen Prof. Dr. Stefan Böttcher Universität Paderborn

Kapitel 10. JDBC und SQLJ. Prof. Dr. Wolfgang Weber Vorlesung Datenbanken 1

Datenbanksysteme I Datenbankprogrammierung Felix Naumann

Webbasierte Informationssysteme

11 Anwendungsprogrammierung

WS 2010/11 Datenbanksysteme Fr 15:15 16:45 R Vorlesung #6. SQL (Teil 4)

SQLJ. Standardisierte Java-DB. DB-Schnittstelle. Spezifikationen. Oracle, IBM, Informix, Sybase,, Tandem, Sun, Microsoft stehen dahinter

Datenbankschnittstellen erlauben Zugriff auf Datenbank aus einer externen Anwendung

9. Sicherheitsaspekte

PHP- Umgang mit Datenbanken (1)

10. Programmieren in SQL

Datenbanksysteme I Übung: JDBC. Jana Bauckmann

Webbasierte Informationssysteme

Kapitel DB:VI (Fortsetzung)

Kapitel DB:VI (Fortsetzung)

Kurzeinführung ODBC. 1 Codebeispiele. 1.1 Embedded SQL

2. Datenbank-Programmierung

Cursor erlauben eines zeilenweise Verarbeitung einer Tabelle oder eines Anfrageergebnisses in Transact-SQL

SQL. SQL: Structured Query Language. Früherer Name: SEQUEL. Standardisierte Anfragesprache für relationale DBMS: SQL-89, SQL-92, SQL-99

Datenbanksysteme 2011

Java Database Connectivity-API (JDBC)

Embedded SQL in PostgreSQL

JDBC. Es kann z.b. eine ODBC-Treiberverbindung eingerichtet werden, damit das JAVA-Programm auf eine ACCESS-DB zugreifen kann.

Datenbankprogrammierung 1

Klausur Datenbanken II

seit Java 1.1 Bestandteil der API: packages java.sql, javax.sql

Oracle & Java HOW TO

Datenbank und Informationssysteme

Das diesem Dokument zugrundeliegende Vorhaben wurde mit Mitteln des Bundesministeriums für Bildung und Forschung unter dem Förderkennzeichen

Java Database Connectivity-API (JDBC)

Datenbanksysteme 2011

JDBC. Java DataBase Connectivity

Enterprise Computing Einführung in das Betriebssystem z/os. Prof. Dr. Martin Bogdan Prof. Dr.-Ing. Wilhelm G. Spruth WS2012/2013

DATENBANKEN SQL UND SQLITE VON MELANIE SCHLIEBENER

Rückblick. SQL bietet viele Möglichkeiten zur Anfrageformulierung

Datenbanken (WS 2015/2016)

Kapitel 14. Objekt-relationales Mapping (ORM) mit Hibernate bzw. Java Persistance API (JPA) Prof. Dr. Wolfgang Weber Vorlesung Datenbanken

Teil VIII. Weitere Datenbanksprachen

Softwareentwicklung mit JAVA EE

Inhalt. Einbettungstechniken für SQL. 1. Datenbank-Programmierung. Statische Einbettung

vs. Fehler zur Übersetzungszeit

SQL (Structured Query Language) Schemata Datentypen

Architekturen. Von der DB basierten zur Multi-Tier Anwendung. DB/CRM (C) J.M.Joller

Universität Stuttgart Abteilung Anwendersoftware Steht für Embedded SQL in Java. - Java-Methoden als SQL Stored-Procedures

UNIVERSITÄT ULM Fakultät für Ingenieurswissenschaften und Informatik Institut für Datenbanken und Informationssysteme

Datenbanken. Autor Rainer Colgen (0171)

4. Objektrelationales Typsystem Kollektionstypen. Nested Table

Willkommen. Datenbanken und Anbindung

Java Database Connectivity (JDBC) Walther Rathenau Gewerbeschule 1

Java: MySQL-Anbindung mit JDBC.

Prozedurale Datenbank- Anwendungsprogrammierung

Die Anweisung create table

Kap. 9 IS-Anwendungsentwicklung

Kapitel 4 Dynamisches SQL

SQL für Trolle. mag.e. Dienstag, Qt-Seminar

Daten Bank. 4. Vorlesung. Dr. Karsten Tolle PRG2 SS 2012

Objektorientierte Programmierung

Aufgabenstellung. Bekannte Lösungsansätze. Die Idee. Native Informix Architektur

Entwicklungsumgebung für die Laborübung

Wie kommen die Befehle zum DBMS

Funktionen. Überblick über Stored Functions. Syntax zum Schreiben einer Funktion. Schreiben einer Funktion

[ SQL] Wissen, das sich auszahlt

Praktische SQL-Befehle 2

Semantische Integrität (auch: Konsistenz) der in einer Datenbank gespeicherten Daten als wichtige Anforderung

Konzeption und Implementierung eines Datenbank-Agenten für die Bereitstellung von Daten aus dem Verkehr

Datenbanksysteme 2015

Kapitel 2 Anwendungsprogrammierschnittstelle und Anfrageverarbeitung

Das diesem Dokument zugrundeliegende Vorhaben wurde mit Mitteln des Bundesministeriums für Bildung und Forschung unter dem Förderkennzeichen

Android Programmierung. Studiengang MI

In diesem Abschnitt wollen wir uns mit der Architektur von Datenbank Managements Systemen beschäftigen.

Kopplung (1) Kopplung (3) Kopplung (2) Eingebettetes statisches SQL (1) Kopplung (4) 8. Anwendungsprogrammierschnittstelle

Datenbanken. Anwendungsentwicklung in Datenbanken: Prozedurale Spracherweiterung von SQL (z.b. PL/SQL bei Oracle)

Dynamisches SQL. Folien zum Datenbankpraktikum Wintersemester 2009/10 LMU München

Teil I: Existierende Infrastruktur heterogener und verteilter Informationssysteme

Programmieren in C. Eine Einführung in die Programmiersprache C. Prof. Dr. Nikolaus Wulff

DBS: Anwendungsprogrammierung

5.8 Bibliotheken für PostgreSQL

10. Anwendungsprogrammierung. Client-Server-Architektur

SQLJ SQLJ. SQL-Klauseln. Embedded SQL für Java. Einbettungsprinzip. Host-Variablen. SQLJ ist in 3 Teile gegliedert: Stefan Böttcher Sven Groppe

Java Application 1 Java Application 2. JDBC DriverManager. JDBC-ODBC Br idge. ODBC Driver Manager. Dr iver C. Dr iver D.

Oracle: Abstrakte Datentypen:

Datenbankentwurf & Datenbankzugriff mit JDBC. Georg Köster Sven Wagner-Boysen

Datenbanken & Informationssysteme (WS 2016/2017)

SQL und MySQL. Kristian Köhntopp

In diesem Anschnitt geht es um die SQL Anweisungen, mit denen ich den Zugriff auf das Datenbankschema steuern kann.

SQL structured query language

Wiederholung VU Datenmodellierung

Einbettung in SQL. Zwei Prinzipien: (1) Statische Einbettung

TU München, Fakultät für Informatik Lehrstuhl III: Datenbanksysteme Prof. Alfons Kemper, Ph.D.

C++ Anwendungskurs Tag 4: Datenbanken Daniela Horn Institut für Neuroinformatik Real-time Computer Vision

Andreas Heuer Gunter Saake Kai-Uwe Sattler. Datenbanken. kompakt

Schnellübersichten. SQL Grundlagen und Datenbankdesign

Datenschutz: Zugriffsrechte in SQL

3 Embedded SQL. 3.1 Theorie Was ist Embedded SQL?

Java und Datenbanksysteme Datenbankanbindung mit JDBC

Datenbanken SQL JDBC. Programmieren II. Dr. Klaus Höppner. Hochschule Darmstadt Sommersemester / 21

Relationales Modell: SQL-DDL. SQL als Definitionssprache. 7. Datenbankdefinitionssprachen. Anforderungen an eine relationale DDL

Transkript:

11. Datenbankschnittstellen

Inhalt 11.1 Motivation 11.2 Eingebettetes SQL 11.3 Open Database Connectivity (ODBC) 11.4 Java Database Connectivity (JDBC) 11.5 Objekt-Relationale Abbildung (ORM) 2

11.1 Motivation Datenbankschnittstellen ermöglichen den Zugriff auf die gespeicherten Daten aus einer externen Anwendung DBMS und Anwendung laufen oft auf unterschiedlichen Rechnern, so dass Netzwerkkommunikation nötig ist Zwei Zielgruppen von Datenbankschnittstellen Endbenutzer, die Daten mit bekannten oder einfach zu bedienenden Anwendungen lesen bzw. ändern möchten Entwickler, die aus Code der entwickelten Anwendung auf die Daten zugreifen möchten 3

Anwendungsbeispiele Anwendungsbeispiele von Datenbankschnittstellen: Webapplikation (z.b. ein Content-Management-System), welche mit Java Server Pages implementiert wurde, greift auf eine Datenbank (z.b. MS SQL Server) zu Mitarbeiterin erstellt Serienbrief mit MS Word, der an alle Kunden geschickt werden soll; die Kundendaten liegen in einer Datenbank (z.b. MS SQL Server) Applikation auf Smartphone speichert ihre internen Daten in einer eingebetteten Datenbank (z.b. SQLite), die auf dem gleichen Endgerät läuft 4

Anforderungen Anforderungen an Datenbankschnittstellen sind u.a. Portabilität, d.h. kann das verwendete RDBMS oder die Programmiersprache einfach ausgetauscht werden Fehleranfälligkeit, d.h. werden Fehler (z.b. inkorrektes SQL) bereits bei der Entwicklung oder erst beim Einsatz erkannt Wartbarkeit, d.h. erfordert Änderung (z.b. des Schemas) weitreichende Modifikationen des zugreifenden Codes Transparenz, d.h. bleiben die Spezifika des RDBMS bzw. der Datenbank (z.b. Schema) verborgen 5

Historisches Call-Level Interfaces (CLIs) als früher Ansatz, bei dem Hersteller sprachspezifische (z.b. für C oder Fortran) Schnittstellen für bestimmtes Datenbanksystem in Form von Bibliotheken zur Verfügung stellen Eingebettetes SQL erweitert Wirtssprache (z.b. C) um SQL-Kommandos, die vor Compilierung in Befehle der Wirtssprache (z.b. CLI-Aufrufe) übersetzt werden SQL/CI als standardisierte Schnittstelle in SQL:1999, die die Grundlage für Open Database Connectivity darstellt 6

Historisches Open Database Connectivity (ODBC) entkoppelt Programmiersprache und Datenbanksystem durch Verwendung von Treibern Java Database Connectivity (JDBC) als moderne objektorientierte Standardschnittstelle für Anwendungen in Java Frameworks für objekt-relationale Abbildung (z.b. Java Persistence und Hibernate) bilden Objekte mit Attributen auf Tabellen mit Spalten ab; die Datenbank kann den Entwicklern dabei verborgen bleiben, so dass keine SQL-Kenntnisse notwendig sind 7

11.2 Eingebettetes SQL Eingebettetes SQL erweitert eine Wirtssprache (z.b. C) um SQL-Kommandos für den Datenbankzugriff Erweiterungen sind keine eigentlichen Kommandos der Wirtssprache, so dass Code vor der eigentlichen Compilierung durch einen Präcompiler transformiert werden muss Präcompiler übersetzt die erweiterten Kommandos in eigentliche Kommandos der Wirtssprache (z.b. CLI-Aufrufe für Datenbankzugriff) 8

Eingebettetes SQL Präcompiler kann Korrektheit der SQL-Kommandos, auch ob sie kompatibel mit dem Schema sind, überprüfen Eingebettetes SQL oft auf statische SQL-Kommandos beschränkt, d.h. die Kommandos müssen zur Übersetzungszeit bereits feststehen Eingebettetes SQL spielt heute eine geringere Rolle SQLJ für Java Embedded SQL für C/C++ 9

SQLJ für Java SQL-Kommandos werden mit #sql ausgezeichnet und in Java-Code eingebettet Erweiterter Code muss mittels Präcompiler sqlj in echten, für den Java-Compiler verständlichen, Code umgewandelt werden Präcompiler überprüft, ob SQL-Kommandos korrekte Syntax haben, ob sie mit dem Schema übereinstimmen und die Typkompatibilität für den Datenaustausch Generierter Code greift per JDBC auf Datenbank zu 10

SQLJ für Java SQL-Kommandos werden mit #sql ausgezeichnet und in Java-Code eingebettet 1 #sql {INSERT INTO Studenten (MatrNr, Name, Vorname) 2 VALUES (23781, Max, Mü ller )} Wirtsvariablen erlauben Datenaustausch zwischen Java-Code und SQL-Kommandos 1 long matrnr = 23781; 2 #sql {DELETE FROM Studenten WHERE MatrNr = :matrnr}; 11

SQLJ für Java Iteratoren zum Lesen eines Anfrageergebnis in Java müssen vor Verwendung deklariert werden 1 #sql iterator StudentIter (long matrnr, String vorname, String name); hierdurch wird eine Klasse StudentIter generiert Definition einer Instanz der Klasse StudentIter und Ausführung der zugehörigen Anweisung 1 StudentIter iter; 2 #sql iter={ SELECT MatrNr, Name, Vorname FROM Studenten }; 12

SQLJ für Java Navigation durch das Anfrageergebnis 1 while (iter.next()) { 2 System.out.println(iter.matrnr() + " " + 3 iter.vorname() + " " + iter.name()); 4 } SQLJ-Code wird in Dateien mit Endung.sqlj abgelegt, um ihn von regulärem Java-Code zu unterscheiden SQLJ unterstützt, mit Einschränkungen, dynamisches SQL: SQL-Kommandos können parametrisiert werden und somit erst zur Laufzeit genau definiert sein 13

SQLJ für Java 1 import java.sql.*; 2 import sqlj.runtime.ref.defaultcontext; 3 import oracle.sqlj.runtime.oracle; 4 5 #sql iterator StudentIter (long matrnr, String vorname, String name); 6 7 public class StudentExample 8 { 9 public static void main (String args[]) throws SQLException 10 { 11 // Verbindung zur Datenbank herstellen 12 Oracle.connect 13 (" jdbc: oracle: thin: @sw03:5521:hs", " user", " password"); 14 15 // Iterator definieren 16 StudentIter iter; 17 #sql iter={ SELECT MatrNr, Name, Vorname FROM Studenten }; 18 19 // Datensä tze lesen 20 while (iter.next()) { 21 System.out.println 22 (iter.matrnr() + " " + iter.vorname() + " " + iter.name()); 23 } 24 } 25 } 14

Embedded SQL für C 1 # include <string.h> 2 # include <stdio.h> 3 # include <ctype.h> 4 5 // Variablen von SQL- Communication Area einbinden 6 EXEC SQL INCLUDE SQLCA; 7 8 int main(int argc, char **argv) { 9 10 // Deklaration von Variablen 11 EXEC SQL BEGIN DECLARE SECTION; 12 VARCHAR uid[80]; 13 VARCHAR pwd[20]; 14 VARCHAR db[20]; 15 VARCHAR vorname[30]; 16 VARCHAR name[20]; 17 EXEC SQL END DECLARE SECTION; 18 // Verbindungsdaten setzen 15

Embedded SQL für C 19 // Verbindungsdaten setzen 20 strcpy(uid.arr," user"); 21 uid.len = strlen(uid.arr); 22 strcpy(pwd.arr," password"); 23 pwd.len = strlen(pwd.arr); 24 strcpy(db.arr," hochschule"); 25 db.len = strlen(db.arr); 26 27 // Verbindung zur Datenbank herstellen 28 EXEC SQL CONNECT :uid IDENTIFIED BY :pwd USING :db; 29 30 // Anfrage an Datenbank schicken 31 EXEC SQL SELECT Name, Vorname 32 FROM Studenten 33 INTO :name, :vorname 34 WHERE MatrNr = 23786; 35 36 // Name und Vorname ausgeben 37 printf(" Der Student heisst %s %s", vorname, name); 38 39 } 16

11.3 Open Database Connectivity (ODBC) Open Database Connectivity (ODBC) in den 1990ern von Microsoft entwickelt und Grundlage für den von der SQL Access Group (SAG) entworfenen Standard SQL/CLI Portabilität als Ziel von ODBC, d.h. Anwendung soll unabhängig vom verwendeten RDBMS (oder allgemein: Datenquelle) sein und deren Austausch soll einfach erfolgen können 17

Treibermanager und Treiber ODBC erreicht Portabilität durch Verwendung von Treiber als Vermittler zwischen Anwendung und Datenquelle (vgl. Druckertreiber und Office-Anwendungen) Anwendung kommuniziert mit Treibermanager über Aufrufe von festgelegten ODBC-Funktionen (z.b. SQLConnect zum Aufbau einer Verbindung) Datenquellen (z.b. Datenbank oder.csv-datei) sind beim Treibermanager registriert Treiber übersetzt ODBC-Funktionsaufrufe für die jeweilige Datenquelle um 18

Treibermanager und Treiber Anwendung Treibermanager Treiber RDBMS Treiber CSV RDBMS CSV 19

Treibermanager und Treiber Abhängig von der Art der ODBC-Datenquelle muss der Treiber selbst mehr oder weniger leisten, z.b. bei einem mächtigen RDBMS (z.b. MS SQL Server) können die SQL-Kommandos an das RDBMS unverändert weitergereicht werden bei einer einfachen Datenquelle (z.b. CSV-Dateien) muss der Treiber selbst sich um die Ausführung von SQL-Kommandos kümmern, d.h. intern ein DBMS (z.b. mit Selektion, Projektion und Join) implementieren 20

ODBC-Funktionen ODBC definierte drei Ebenen von Funktionen (API-levels) Core-Level Funktionen z.b. SQLConnect zum Aufbau einer Verbindung zu einem Treiber SQLAllocStmt zum Anlegen eines SQL-Kommandos Level-1 Funktionen z.b. SQLGetInfo zum Erfragen von Informationen über den Treiber SQLGetTypeInfo zum Erfragen unterstützter Datentypen Level-2 Funktionen z.b. SQLColumnPrivilege zum Erfragen verfügbarer Spalten SQLPrimaryKeys zum Erfragen von Primärschlüsselattributen 21

SQL-Unterstützung in ODBC ODBC kennt drei Ebenen (levels) der SQL-Unterstützung Minimale SQL-Grammatik CREATE TABLE und DROP TABLE INSERT, SELECT und UPDATE keine Gruppierung und Aggregation, keine Funktionen nur Datentyp CHAR Core SQL zusätzlich z.b. ALTER TABLE, CREATE INDEX, CREATE VIEW vollständiges INSERT, SELECT und UPDATE Datentypen z.b. VARCHAR, DECIMAL, NUMERIC, SMALLINT 22

SQL-Unterstützung in ODBC Extended SQL auch OUTER JOIN in SELECT skalare Funktionen wie SUBSTRING oder ABS zusätzliche Datentypen z.b. DATE und TIME Stapelverarbeitung von SQL-Kommandos Anlegen gespeicherter Prozeduren Portabilität und Performanz der Anwendung hängt von verwendetem API-Level und SQL-Unterstützung ab; ein höherer API-Level und eine höhere SQL-Unterstützung führen zu besserer Performanz, aber eben auch zu geringerer Portabilität 23

Datenbankzugriff mittels ODBC aus C 1 # include " SQL.H" 2 3 int main(int argc, char **argv) { 4 5 // Umgebungs - Handle belegen SQLAllocConnect( henv, & hdbc ); 6 SQLAllocEnv( &henv ); 7 8 // Verbindungs - Handle belegen 9 rc = SQLConnect( hdbc, server, SQL_NTS, uid, SQL_NTS, pwd, SQL_NTS ); 10 11 // Verbindung aufbauen, Abbruch bei Fehler 12 if( rc!= SQL_SUCCESS && rc!= SQL_SUCCESS_WITH_INFO ) 13 return( print_err( hdbc, SQL_NULL_HSTM )); 14 15 // Speicherplatz für SQL- Befehle belegen 16 SQLAllocStmt( hdbc, &hstmt ); 17 18 // SQL- Kommando zum Anlegen einer Tabelle in String 19 szsql = " CREATE TABLE Studenten 20 ( MatrNr INTEGER, Vorname VARCHAR(30), Name VARCHAR(30))"; 21 // SQL- Kommando ausführen, Abbruch bei Fehler 24

Datenbankzugriff mittels ODBC aus C 21 22 // SQL- Kommando ausführen, Abbruch bei Fehler 23 if( SQLExecDirect( hstmt, szsql, SQL_NTS )!= SQL_SUCCESS ) 24 return( print_err( hdbc, hstmt ); 25 26 // Anlegen der Tabelle mit COMMIT abschließen 27 SQLTransact( hdbc, SQL_COMMIT ); 28 29 // Ressourcen wieder freigeben und Verbindung schließen 30 SQLFreeStmt( hstmt, SQL_DROP ); 31 SQLFreeConnect( hdbc ); 32 SQLFreeEnv( henv ); 33 34 return 0; 35 } 25

Datenbankzugriff mittels ODBC aus Excel ODBC hat sich als Standardschnittstelle etabliert und wird von Standardsoftware (z.b. MS Office) unterstützt; dies erlaubt u.a. folgende Anwendungsszenarien MS Excel und MS Access können als Frontend zum Lesen und Ändern von in einem RDBMS gespeicherter Daten verwendet werden Serienbriefe können in MS Word mittels Zugriff auf in RDBMS gespeicherter Daten generiert werden MS Excel kann als ODBC-Datenquelle dienen, d.h. Datenblätter können mittels SQL angefragt werden 26

Zusammenfassung Datenbankschnittstellen erlauben Zugriff auf Datenbank aus einer externen Anwendung Portabilität als wichtige Anforderung, d.h. RDBMS oder Programmiersprache soll leicht austauschbar sein Call-Level Interfaces als Schnittstellen für bestimmtes RDBMS und bestimmte Programmiersprache Open Database Connectivity (ODBC) erreicht Entkopplung durch Verwendung von Treibern 27

Literatur [1] A. Kemper und A. Eickler: Datenbanksysteme Eine Einführung, De Gruyter Oldenbourg, 2015 (Kapitel 4) [2] G. Saake, K.-U. Sattler und A. Heuer: Datenbanken - Konzepte und Sprachen, mitp Professional, 2013 (Kapitel 13) 28