Client/Server-Programmierung

Ähnliche Dokumente
Client/Server-Programmierung

Java Database Connectivity-API (JDBC)

Java Database Connectivity-API (JDBC)

Java Database Connectivity (JDBC) Walther Rathenau Gewerbeschule 1

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

Einführung in JDBC. IFIS Universität zu Lübeck

Programmieren II. Beispiele für RDBMS. Relationale Datenbanken. Datenbanken SQL. Dr. Klaus Höppner JDBC. Hochschule Darmstadt SS 2008

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

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

Ho Ngoc Duc IFIS - Universität zu Lübeck

JDBC. Java DataBase Connectivity

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

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

Java Database Connectivity-API (JDBC)

Webbasierte Informationssysteme

Java: MySQL-Anbindung mit JDBC.

Java Database Connectivity API / JDBC

Universität Augsburg, Institut für Informatik WS 2006/2007 Dr. W.-T. Balke 11. Dez M. Endres, A. Huhn, T. Preisinger Lösungsblatt 7

Willkommen. Datenbanken und Anbindung

Datenbanken SQL-Grundlagen JDBC SQL-Constraints. Programmieren II. Martin Schultheiß. Hochschule Darmstadt Sommersemester 2011

Java und Datenbanken

Klausur Datenbanken II

Webbasierte Informationssysteme

Datenbanksysteme 2011

Kapitel DB:VI (Fortsetzung)

Datenbanksysteme. Programmieren von Datenbankzugriffen mit JDBC. Burkhardt Renz. Fachbereich MNI Technische Hochschule Mittelhessen

Java und Datenbanksysteme Datenbankanbindung mit JDBC

Datenbankanwendungen (JDBC)

DB-Programmierung. Lehr- und Forschungseinheit Datenbanken und Informationssysteme 1. Ziele. DB2 Zugriff mit Java selbst programmieren

Kurzübersicht JDBC. Marc Monecke. 15. Januar 2003

Mehr Performance mit JDBC JAVA-Anwendungen und die Oracle-Datenbank. Carsten Czarski Business Unit Database Oracle Deutschland GmbH

Programmieren II. Relationale Datenbanken. Vorlesung 07. Handout S. 1. Martin Schultheiß. Hochschule Darmstadt Sommersemester 2011.

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

Oracle: Abstrakte Datentypen:

Kapitel 11: Anwendungsentwicklung

11 Anwendungsprogrammierung

Kapitel 11: Anwendungsentwicklung

Datenbankschnittstellen erlauben Zugriff auf Datenbank aus einer externen Anwendung

Datenbankzugriff mit JDBC

Übersicht. Relationale Datenbanken SQL - Structured Query Language JDBC - Java Datenbank Schnittstelle Beispielanwendung. R. Kopetzky 7.

Isolationsstufen für Transaktionen. Dr. Karsten Tolle

Kapitel DB:VI (Fortsetzung)

12. Programmierung in der Datenbank

Datenbanksysteme. Programmieren von Datenbankzugriffen mit JDBC. Burkhardt Renz. Fachbereich MNI Technische Hochschule Mittelhessen

Musterlösung Übungsblatt 11

Datenbanksysteme 2 Fachbereich Angewandte Informatik WS 11/12 Dipl.-Inf. Christian Pape. 6. Übung

Zugriff auf die Datenbank. Ulf Leser Wissensmanagement in der Bioinformatik

Tag 5 Inhaltsverzeichnis

vs. Fehler zur Übersetzungszeit

Java Database Connectivity-API (JDBC)

Praktikum aus Softwareentwicklung 2, Stunde 7

Datenbank und Informationssysteme

Kapitel 11: Anwendungsentwicklung

Oracle & Java HOW TO

Transaktionen in Praxis. Dr. Karsten Tolle Vorl

Hauptschritte einer JDBC-App

Hauptschritte einer JDBC-App

Udo Matthias Munz. Datenbanken und SQL. mit. Einführung. Informationstechnik

JDBC. Allgemeines ODBC. java.sql. Beispiele

Vorlesung Informatik II

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

1a) SQL Stored Procedure via IDs

Wie kommen die Befehle zum DBMS

Anwendungsentwicklung für relationale Datenbanken setzt voraus, dass prozedurale Abläufe programmiert werden können!

Datenbanksysteme I Übung: JDBC. Jana Bauckmann

MySQL mit MyLinux. 2/2003 Java unter Linux

3. Datenbankzugriff (JDBC) Grundlagen der Programmierung II (Java)

Probeklausur Datenbanktechnologie

Universität Augsburg, Institut für Informatik WS 2009/2010 Prof. Dr. W. Kießling 18. Dez Dr. A. Huhn, F. Wenzel, M. Endres Lösungsblatt 8

MySQL mit MyLinux. 2/2003 Java unter Linux

Universität Augsburg, Institut für Informatik WS 2014/2015 Prof. Dr. W. Kießling 05. Dez F. Wenzel, L. Rudenko Lösungsblatt 7

Datenbanksysteme I. Aufgabe 1: Erstellen einer Multimedia-Datenbank. Grundlage sind wiederum bereits implementierte Methoden aus Übungsblatt 6:

Datenbanksysteme I Datenbankprogrammierung Felix Naumann

Beispiel: DB-Mock (1/7)

Exercises for the course Databases and Information Systems I WS 2006/2007 Special exercise JDBC

GML und Bibliothek oracle.sdoapi

Universität Augsburg, Institut für Informatik WS 2011/2012 Prof. Dr. W. Kießling 09. Dez Dr. M. Endres, Dr. S. Mandl, F. Wenzel Lösungsblatt 6

Tag 5 Inhaltsverzeichnis

Modifikation der Datenbank

5.8 Bibliotheken für PostgreSQL

JDBC Datenzugriff aus Java ETIS SS04

AG Datenbanken und Informationssysteme Wintersemester 2006 / 2007

7. Übungsblatt. Für die Übung am Donnerstag, 14. Dezember 2006, von 15:30 bis 17:00 Uhr in 13/222.

Client/Server-Programmierung

Client/Server-Programmierung

Ausgewählte Implementierungsprobleme

Client/Server-Programmierung

PROGRAMMIERPROJEKT 2016 VERWENDETE TECHNOLOGIEN

Client/Server-Programmierung

Client/Server-Programmierung

Transkript:

Client/Server-Programmierung WS 2017/2018 Betriebssysteme / verteilte Systeme rolanda.dwismuellera@duni-siegena.de Tel.: 0271/740-4050, Büro: H-B 8404 Stand: 14. September 2017 Betriebssysteme / verteilte Systeme Client/Server-Programmierung (1/15) i

Client/Server-Programmierung WS 2017/2018 2 Java Database Connectivity (JDBC) Betriebssysteme / verteilte Systeme Client/Server-Programmierung (1/15) 62

2 Java Database Connectivity (JDBC)... 2.1 Überblick Java-API zum portablen Zugriff auf relationale Datenbank- Systeme Unabhängig von konkreter Datenbank-Implementierung Funktionen: Verbindung zur Datenbank herstellen Ausführung von SQL-Anweisungen Zugriff auf Abfrage-Ergebnisse Vergleichbar mit ODBC, aber einfachere Schnittstelle Anschluß zur Datenbank über herstellerspezifische Treiber Betriebssysteme / verteilte Systeme Client/Server-Programmierung (1/15) 63

2 Java Database Connectivity (JDBC)... 2.2 Relationale Datenbanken und SQL Relationale Datenbank = Menge von Tabellen jede Spalte hat Namen und Datentyp jede Zeile enthält i.a. ein Feld, dessen Wert die Zeile eindeutig identifiziert (Primärschlüssel) Aufbau festgelegt in Datenbank-Schema Beispiel: ag_name AG_ID AG_NAME 1 2 3 BMW Siemens Thyssen ag_data ID AG_ID DAY VALUE 7 3 9 1 12 2 9 9 8 102.30 99.10 30.45 Primär schlüssel Betriebssysteme / verteilte Systeme Client/Server-Programmierung (1/15) 64

2.2 Relationale Datenbanken und SQL... SQL Standardisierte Abfragesprache für relationale Datenbanken Erlaubt u.a.: Abfrage von Daten (SELECT) Erzeugung neuer Tabellen (CREATE TABLE) Einfügen von Datensätzen (Zeilen) (INSERT) Löschen von Datensätzen (DELETE) Ändern von Datensätzen (UPDATE) Auswahl der Datensätze i.d.r. über deren Inhalt häufig über Primärschlüssel Betriebssysteme / verteilte Systeme Client/Server-Programmierung (1/15) 65

2.2 Relationale Datenbanken und SQL... Beispiele für SQL-Anfragen SELECT AG_ID, AG_NAME FROM ag_name WHERE AG_NAME = Siemens liefert die Zeile für Siemens aus der ag name-tabelle SELECT ag_name.ag_name, ag_data.value FROM ag_name, ag_data WHERE VALUE > 90 AND ag_name.ag_id = ag_data.ag_id liefert Name und Kurs aller Aktien mit Kurs über 90 gibt Information aus zwei Tabellen zurück Verbindung der Einträge über den Primärschlüssel (Natural Join) Betriebssysteme / verteilte Systeme Client/Server-Programmierung (1/15) 66

2 Java Database Connectivity (JDBC)... 2.3 Architektur von JDBC Java Anwendung JDCB Treiber Manager JDBC/ODBC Brücke ODBC Treiber Treiber für mysql Treiber für Oracle MS mysql Oracle SQL Server Betriebssysteme / verteilte Systeme Client/Server-Programmierung (1/15) 67

2.3 Architektur von JDBC... Klassen des JDBC-Kerns java.sql <<interface>> Driver <<interface>> Connection <<interface>> Statement <<interface>> ResultSet DriverManager <<interface>> PreparedStatement <<interface>> ResultSetMetaData DriverPropertyInfo <<interface>> CallableStatement Betriebssysteme / verteilte Systeme Client/Server-Programmierung (1/15) 68

2.3 Architektur von JDBC... Klassen des JDBC-Kerns... Interface Driver Schnittstelle, die alle JDBC-Treiber implementieren müssen neu geladener Treiber registriert sich bei DriverManager Klasse DriverManager verwaltet Driver-Objekte erzeugt Datenbank-Verbindungen (Connection) Klasse DriverPropertyInfo erlaubt Definition spezieller Parameter beim Aufbau der Datenbank-Verbindung Betriebssysteme / verteilte Systeme Client/Server-Programmierung (1/15) 69

2.3 Architektur von JDBC... Klassen des JDBC-Kerns... Interface Connection repräsentiert Sitzung mit ausgewählter Datenbank erlaubt Erzeugung von Statement-Objekten verwaltet Informationen zum Zustand der Datenbank erlaubt Abfrage von Metadaten der Datenbank (Methode getmetadata(), Resultat: DatabaseMetaData) z.b. unterstützte SQL-Versionen, Limitierungen des Datenbank-Systems,... Interface Statement zur Ausführung einer SQL-Anfrage verwaltet auch Ergebnis der Anfrage (ResultSet) Betriebssysteme / verteilte Systeme Client/Server-Programmierung (1/15) 70

2.3 Architektur von JDBC... Klassen des JDBC-Kerns... Interface PreparedStatement zur Ausführung einer vorkompilierten SQL-Anfrage effizienter bei wiederholter Ausführung Interface CallableStatement erlaubt Aufruf von Stored Procedures SQL-Prozeduren, die in Datenbank selbst abgelegt sind Interface ResultSet Ergebnis-Relation einer Datenbank-Anfrage Interface ResultSetMetaData Metadaten zu den Spalten der Ergebnis-Relation z.b. Name, Typ, vorzeichenbehaftet,... Betriebssysteme / verteilte Systeme Client/Server-Programmierung (1/15) 71

2 Java Database Connectivity (JDBC)... 2.4 Ein Beispiel import java.sql.*; import java.lang.*; public class Beispiel { public static void main(string[] args) { try { // Laden des JDBC Treibers Class.forName("com.mysql.jdbc.Driver"); } catch (ClassNotFoundException e) { System.out.println("Treiber nicht ladbar:" + e); return; } Betriebssysteme / verteilte Systeme Client/Server-Programmierung (1/15) 72

2.4 Ein Beispiel... try { // Verbindung zur Datenbank Connection con = DriverManager.getConnection( "jdbc:mysql://bslabserv01.lab.bvs/cspdb","",""); // Erzeuge SQL Anweisung und führe sie aus Statement stmt = con.createstatement(); ResultSet rs = stmt.executequery( "SELECT AG_ID, AG_NAME FROM ag_name"); // Ausgabe des Ergebnisses while (rs.next()) { System.out.println("" + rs.getint("ag_id") + ", " + rs.getstring("ag_name")); } Betriebssysteme / verteilte Systeme Client/Server-Programmierung (1/15) 73

2.4 Ein Beispiel... } } // Alles schließen rs.close(); stmt.close(); con.close(); } catch (SQLException e) { System.out.println("SQL Exception: " + e.getmessage()); e.printstacktrace(system.out); } Betriebssysteme / verteilte Systeme Client/Server-Programmierung (1/15) 74

2 Java Database Connectivity (JDBC)... 2.5 Details zu JDBC Laden der Treiber Vor Verwendung von JDBC müssen die Treiber geladen werden: try { Class.forName("com.mysql.jdbc.Driver"); Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); } catch (ClassNotFoundException e) {... } Alternativ: Setzen der jdbc.drivers Property java -Djdbc.drivers=com.mysql.jdbc.Driver:sun.jdbc. odbc.jdbcodbcdriver... Betriebssysteme / verteilte Systeme Client/Server-Programmierung (1/15) 75

2.5 Details zu JDBC... Verbindung zur Datenbank herstellen Verbindung wird durch Connection-Objekt repräsentiert Mehrere Datenbank-Verbindungen pro Anwendung möglich Erzeugung über Connection con = DriverManager.getConnection( "url", "user", "password"); Variante von getconnection() erlaubt Definition von Properties für die Datenbank-Verbindung Wenn Verbindung nicht mehr benötigt wird: explizites Schließen mit Methode con.close() Freigabe von Netzwerk- und Speicherressourcen Betriebssysteme / verteilte Systeme Client/Server-Programmierung (1/15) 76

2.5 Details zu JDBC... Ausführung einer SQL-Anweisung Erzeugung eines Statement-Objekts Statement stmt = con.createstatement(); Ausführung der SQL-Anweisung ResultSet rs = stmt.executequery("select..."); Methoden executeupdate() für Anfragen ohne Ergebnis, bzw. execute(), falls unbekannt, ob Ergebnis geliefert wird execute() liefert true, falls Ergebnis vorhanden Statement-Objekt repräsentiert eine einzige SQL-Anfrage ResultSet wird bei erneuter Anfrage über selbes Statement-Objekt ungültig für simultane Anfragen: mehrere Statement-Objekte! Betriebssysteme / verteilte Systeme Client/Server-Programmierung (1/15) 77

2.5 Details zu JDBC... Zugriff auf die Resultate Ergebnis einer SQL-Anfrage (SELECT) ist eine Tabelle Struktur gekapselt in ResultSet-Objekt Methoden u.a.: next(): setzt Lesezeiger auf nächste Zeile zu Begin steht Zeiger vor der ersten Zeile Ergebnis false, falls keine Zeile mehr vorhanden get...(string name) / get...(int nr): liefert Inhalt des Feldes mit Spaltenname name bzw. Spaltennummer nr mehrere Methoden für die verschiedenen Datentypen getstring() liefert immer String-Repräsentation close(): Ressourcenfreigabe Betriebssysteme / verteilte Systeme Client/Server-Programmierung (1/15) 78

2.5 Details zu JDBC... SQL-Datentypen und Zugriffsmethoden (Auswahl) SQL Typ(en) Java Typ Methode CHAR, VARCHAR String getstring() NUMERIC, DECIMAL java.math.bigdecimal getbigdecimal() BIT boolean getboolean() TINYINT byte getbyte() SMALLINT short getshort() INTEGER int getint() BIGINT long getlong() REAL float getfloat() FLOAT, DOUBLE double getdouble() BINARY, VARBINARY byte[] getbytes() DATE java.sql.date getdate() Betriebssysteme / verteilte Systeme Client/Server-Programmierung (1/15) 79

2.5 Details zu JDBC... Ausführung vorkompilierter SQL-Anfragen Für wiederkehrende, ähnliche Aufgaben sind vorkompilierte SQL-Anfragen (PreparedStatement) effizienter die Anfragen sind auch parametrisierbar Auch Sicherheitsvorteil gegen SQL Injection Erzeugung eines PreparedStatement-Objekts PreparedStatement stmt = con.preparestatement( "INSERT INTO Employees (Name, Phone) (?,?)");? als Platzhalter für Parameter Ausführung der Anfrage mit konkreten Parametern stmt.clearparameters(); stmt.setstring(1, "Jimmy Dean"); // erster Param. stmt.setstring(2, "201 555-7685"); // zweiter Param. stmt.executeupdate(); // kein Ergebnis Betriebssysteme / verteilte Systeme Client/Server-Programmierung (1/15) 80

2.5 Details zu JDBC... Ausführung von Stored Procedures Oracle PL/SQL Prozedur (Im Datenbanksystem gespeichert) CREATE OR REPLACE PROCEDURE sp_interest (id IN INTEGER bal IN OUT FLOAT) is BEGIN SELECT balance INTO bal FROM accounts WHERE account_id = id; bal = bal + bal * 0.03; UPDATE accounts SET balance = bal WHERE account_id = id; END; Aufruf der Prozedur über JDBC CallableStatement stmt = con.preparecall( "{call sp_interest(?,?)}"); stmt.registeroutparameter(2, Types.FLOAT); stmt.setint(1, accountid); stmt.setfloat(2, 2343.23); stmt.execute(); out.println("new Balance: " + stmt.getfloat(2)); Betriebssysteme / verteilte Systeme Client/Server-Programmierung (1/15) 81

2.5 Details zu JDBC... Transaktionen Verantwortlich für Transaktionen: Connection-Objekt Methoden zur Steuerung von Transaktionen: setautocommit() - automatisches Festschreiben? Voreinstellung: jede SQL-Anweisung wird als individuelle Transaktion ausgeführt commit() - Festschreiben der Transaktion rollback() - Abbruch der Transaktion settransactionisolation() - Isolationsebene festlegen TRANSACTION NONE, sowie die vier Isolations-Ebenen nach ANSI/ISO-SQL99 ( VS, 7.4): read uncommitted, read commited, repeatable read, serializable Voreinstellung ist vom Treiber abhängig Betriebssysteme / verteilte Systeme Client/Server-Programmierung (1/15) 82

2.5 Details zu JDBC... Transaktionen... try { // Höchste Isolationsebene con.settransactionisolation(transaction_serializable); // Transaktionen mit mehreren SQL Anweisungen zulassen con.setautocommit(false); // SQL Anweisungen stmt.executeupdate("update inv SET onhand = 10 WHERE id = 5"); stmt.executeupdate("insert INTO shipping (qty) VALUES (5)"); // Commit aller Aktionen seit letztem Commit/Rollback con.commit(); } catch (SQLException e) { // Rückgängigmachen aller Änderungen con.rollback(); } Betriebssysteme / verteilte Systeme Client/Server-Programmierung (1/15) 83

2 Java Database Connectivity (JDBC)... 2.6 Zusammenfassung JDBC erlaubt portablen Zugriff auf relationale Datenbanken Abfragen über SQL Grundsätzlicher Ablauf: Laden des Treibers (Class.forName()) Verbindung zur Datenbank herstellen (Connection) SQL-Anweisung erzeugen (Statement) SQL-Anweisung ausführen, Ergebnis auslesen (ResultSet) Daneben: Unterstützung für vorkompilierte SQL-Anweisungen und Stored Procedures Transaktionen Betriebssysteme / verteilte Systeme Client/Server-Programmierung (1/15) 84