• Keine Ergebnisse gefunden

Stand:17.Januar2020 i Client/Server-Programmierung(1/15) RolandWism¨ullerBetriebssysteme/verteilteSysteme Stand:17.Januar2020 iii Client/Server-Programmierung(3/15) RolandWism¨ullerBetriebssysteme/verteilteSysteme

N/A
N/A
Protected

Academic year: 2022

Aktie "Stand:17.Januar2020 i Client/Server-Programmierung(1/15) RolandWism¨ullerBetriebssysteme/verteilteSysteme Stand:17.Januar2020 iii Client/Server-Programmierung(3/15) RolandWism¨ullerBetriebssysteme/verteilteSysteme"

Copied!
13
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

Roland Wism ¨uller

Betriebssysteme / verteilte Systeme Client/Server-Programmierung (1/15) i

Roland Wism ¨uller

Betriebssysteme / verteilte Systeme rolanda.dwismuellera@duni-siegena.dde Tel.: 0271/740-4050, B ¨uro: H-B 8404

Stand: 17. Januar 2020

Client/Server-Programmierung

WS 2019/2020

Roland Wism ¨uller

Betriebssysteme / verteilte Systeme rolanda.dwismuellera@duni-siegena.dde

Client/Server-Programmierung

WS 2019/2020

18.10.2019

(2)

Roland Wism ¨uller

Betriebssysteme / verteilte Systeme Client/Server-Programmierung (3/15) 63

Client/Server-Programmierung

WS 2019/2020

2 Java Database Connectivity (JDBC)

2 Java Database Connectivity (JDBC) ...

2.1 ¨Uberblick

➥ Java-API zum portablen Zugriff auf relationale Datenbank- Systeme

➥ Unabh ¨angig von konkreter Datenbank-Implementierung

➥ Funktionen:

Verbindung zur Datenbank herstellen

Ausf ¨uhrung von SQL-Anweisungen

Zugriff auf Abfrage-Ergebnisse

➥ Vergleichbar mit ODBC, aber einfachere Schnittstelle

➥ Anschluß zur Datenbank ¨uber herstellerspezifische Treiber

(3)

2 Java Database Connectivity (JDBC) ...

Roland Wism ¨uller

Betriebssysteme / verteilte Systeme Client/Server-Programmierung (3/15) 65

2.2 Relationale Datenbanken und SQL

➥ Relationale Datenbank = Menge von Tabellen

jede Spalte hat Namen und Datentyp

jede Zeile enth ¨alt i.a. ein Feld, dessen Wert die Zeile eindeutig identifiziert (Prim ¨arschl ¨ussel)

Aufbau festgelegt in Datenbank-Schema

➥ Beispiel:

Primär−

schlüssel AG_ID AG_NAME

2 1 3

BMW Siemens Thyssen ag_name

ID AG_ID DAY VALUE

2 12

9 1

3 7

9 9 8

102.30 99.10 30.45 ag_data

2.2 Relationale Datenbanken und SQL ...

SQL

➥ Standardisierte Abfragesprache f ¨ur relationale Datenbanken

➥ Erlaubt u.a.:

Abfrage von Daten (SELECT)

Erzeugung neuer Tabellen (CREATE TABLE)

Einf ¨ugen von Datens ¨atzen (Zeilen) (INSERT)

L ¨oschen von Datens ¨atzen (DELETE)

Andern von Datens ¨atzen (UPDATE)¨

➥ Auswahl der Datens ¨atze i.d.R. ¨uber deren Inhalt

h ¨aufig ¨uber Prim ¨arschl ¨ussel

(4)

2.2 Relationale Datenbanken und SQL ...

Roland Wism ¨uller

Betriebssysteme / verteilte Systeme Client/Server-Programmierung (3/15) 67

Beispiele f ¨ur SQL-Anfragen

➥ SELECT AG_ID, AG_NAME FROM ag_name

WHERE AG_NAME = ’Siemens’

liefert die Zeile f ¨ur 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 ¨uber 90

gibt Information aus zwei Tabellen zur ¨uck

Verbindung der Eintr ¨age ¨uber den Prim ¨arschl ¨ussel (Natural Join)

2 Java Database Connectivity (JDBC) ...

2.3 Architektur von JDBC

SQL−Server

MS mySQL Oracle

Java Anwendung

JDCB Treiber Manager JDBC/ODBC

Brücke

Treiber für

mySQL Oracle

Treiber für

ODBC Treiber

(5)

2.3 Architektur von JDBC ...

Roland Wism ¨uller

Betriebssysteme / verteilte Systeme Client/Server-Programmierung (3/15) 69

Klassen des JDBC-Kerns

Statement

PreparedStatement

CallableStatement

<<interface>>

<<interface>>

<<interface>>

ResultSet

ResultSetMetaData

<<interface>>

<<interface>>

Connection

<<interface>>

Driver

<<interface>>

DriverManager

DriverPropertyInfo java.sql

2.3 Architektur von JDBC ...

Klassen des JDBC-Kerns ...

➥ Interface Driver

Schnittstelle, die alle JDBC-Treiber implementieren m ¨ussen

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

(6)

2.3 Architektur von JDBC ...

Roland Wism ¨uller

Betriebssysteme / verteilte Systeme Client/Server-Programmierung (3/15) 71

Klassen des JDBC-Kerns ...

➥ Interface Connection

repr ¨asentiert Sitzung mit ausgew ¨ahlter 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 ¨utzte SQL-Versionen, Limitierungen des Datenbank-Systems, ...

➥ Interface Statement

zur Ausf ¨uhrung einer SQL-Anfrage

verwaltet auch Ergebnis der Anfrage (ResultSet)

2.3 Architektur von JDBC ...

Klassen des JDBC-Kerns ...

➥ Interface PreparedStatement

zur Ausf ¨uhrung einer vorkompilierten SQL-Anfrage

effizienter bei wiederholter Ausf ¨uhrung

➥ 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, ...

(7)

2 Java Database Connectivity (JDBC) ...

Roland Wism ¨uller

Betriebssysteme / verteilte Systeme Client/Server-Programmierung (3/15) 73

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;

}

2.4 Ein Beispiel ...

try {

// Verbindung zur Datenbank

Connection con = DriverManager.getConnection(

"jdbc:mysql://bslabserv01.lab.bvs/cspdb","","");

// Erzeuge SQLAnweisung und f ¨uhre 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"));

(8)

2.4 Ein Beispiel ...

Roland Wism ¨uller

Betriebssysteme / verteilte Systeme Client/Server-Programmierung (3/15) 75

// Alles schließen

rs.close();

stmt.close();

con.close();

}

catch (SQLException e) {

System.out.println("SQL Exception: "

+ e.getMessage());

e.printStackTrace(System.out);

} } }

2 Java Database Connectivity (JDBC) ...

2.5 Details zu JDBC Laden der Treiber

➥ Vor Verwendung von JDBC m ¨ussen 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 ...

(9)

2.5 Details zu JDBC ...

Roland Wism ¨uller

Betriebssysteme / verteilte Systeme Client/Server-Programmierung (3/15) 77

Verbindung zur Datenbank herstellen

➥ Verbindung wird durch Connection-Objekt repr ¨asentiert

➥ Mehrere Datenbank-Verbindungen pro Anwendung m ¨oglich

➥ Erzeugung ¨uber

Connection con = DriverManager.getConnection(

"url", "user", "password");

➥ Variante von getConnection() erlaubt Definition von Properties f ¨ur die Datenbank-Verbindung

➥ Wenn Verbindung nicht mehr ben ¨otigt wird:

explizites Schließen mit Methode con.close()

Freigabe von Netzwerk- und Speicherressourcen

2.5 Details zu JDBC ...

Ausf ¨uhrung einer SQL-Anweisung

➥ Erzeugung eines Statement-Objekts

Statement stmt = con.createStatement();

➥ Ausf ¨uhrung der SQL-Anweisung

ResultSet rs = stmt.executeQuery("SELECT ...");

➥ Methoden executeUpdate() f ¨ur Anfragen ohne Ergebnis, bzw. execute(), falls unbekannt, ob Ergebnis geliefert wird

execute() liefert true, falls Ergebnis vorhanden

➥ Statement-Objekt repr ¨asentiert eine einzige SQL-Anfrage

ResultSet wird bei erneuter Anfrage ¨uber selbes

(10)

2.5 Details zu JDBC ...

Roland Wism ¨uller

Betriebssysteme / verteilte Systeme Client/Server-Programmierung (3/15) 79

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 ¨achste 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 ¨ur die verschiedenen Datentypen

getString() liefert immer String-Repr ¨asentation

close(): Ressourcenfreigabe

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()

(11)

2.5 Details zu JDBC ...

Roland Wism ¨uller

Betriebssysteme / verteilte Systeme Client/Server-Programmierung (3/15) 81

Ausf ¨uhrung vorkompilierter SQL-Anfragen

➥ F ¨ur wiederkehrende, ¨ahnliche 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 ¨ur Parameter

➥ Ausf ¨uhrung 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

2.5 Details zu JDBC ...

Ausf ¨uhrung von Stored Procedures

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

Datenbanksystem gespeichert) Oracle PL/SQL−Prozedur (Im

CallableStatement stmt

= con.prepareCall(

stmt.registerOutParameter(2,

stmt.setFloat(2, 2343.23);

out.println("New Balance: "

stmt.execute();

stmt.setInt(1, accountID);

Aufruf der Prozedur über JDBC

+ stmt.getFloat(2));

Types.FLOAT);

"{call sp_interest(?,?)}");

(12)

2.5 Details zu JDBC ...

Roland Wism ¨uller

Betriebssysteme / verteilte Systeme Client/Server-Programmierung (3/15) 83

Transaktionen

➥ Verantwortlich f ¨ur Transaktionen: Connection-Objekt

➥ Methoden zur Steuerung von Transaktionen:

setAutoCommit() - automatisches Festschreiben?

Voreinstellung: jede SQL-Anweisung wird als individuelle Transaktion ausgef ¨uhrt

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 ¨angig

2.5 Details zu JDBC ...

Transaktionen ...

try {

// H ¨ochste Isolationsebene

con.setTransactionIsolation(TRANSACTION_SERIALIZABLE);

// Transaktionen mit mehreren SQLAnweisungen zulassen

con.setAutoCommit(false);

// SQLAnweisungen

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 ¨uckg ¨angigmachen aller ¨Anderungen

con.rollback();

}

(13)

2 Java Database Connectivity (JDBC) ...

Roland Wism ¨uller

Betriebssysteme / verteilte Systeme Client/Server-Programmierung (3/15) 85

2.6 Zusammenfassung

➥ JDBC erlaubt portablen Zugriff auf relationale Datenbanken

Abfragen ¨uber SQL

➥ Grunds ¨atzlicher Ablauf:

Laden des Treibers (Class.forName())

Verbindung zur Datenbank herstellen (Connection)

SQL-Anweisung erzeugen (Statement)

SQL-Anweisung ausf ¨uhren, Ergebnis auslesen (ResultSet)

➥ Daneben: Unterst ¨utzung f ¨ur

vorkompilierte SQL-Anweisungen und Stored Procedures

Transaktionen

Referenzen

ÄHNLICHE DOKUMENTE

➥ Priorit ¨at kann laufend ge ¨andert werden, abh ¨angig vom Verhalten des Threads (Feedback Scheduling). ➥ z.B.: Priorit ¨at bestimmt durch L ¨ange des letzten CPU-Bursts

➥ Am Ende jedes Kursteils gibt es nochmals ein umfangreicheres Final Exam, das wie die Module Group Exams eine elektronische Pr ¨ufung ist. Zus ¨atzlich gibt es ein Hands On

➥ mehreren Knoten, verbunden durch eine Leitung oder.. ➥ mehreren Netzwerken, verbunden durch ein oder

Betriebssysteme / verteilte Systeme Rechnernetze I (1/13) 42.. Teilaufgaben bei der Kommunikation in

➥ damit erkennt auch Station A die Kollision und kann ihren Frame wiederholen. 3.6.3 MAC

➥ Es ist wichtig, daß ein Switch auch ¨uber den Root Port Frames weiterleiten darf, anderenfalls w ¨urde im Beispiel S3 keine Frames von A bzw. zwischen S6 und S4 muss ein

Wenn man noch etwas weiter denkt, k ¨onnten f ¨ur R1 alle Netze, die ¨uber R2 erreichbar sind (also die Netze A, B, C, D) zu einem einzigen, gr ¨oßeren Netz ABCD zusammen-

➥ Route Poisoning: Nicht mehr verf ¨ugbare Routen werden im Distanzvektor nicht gel ¨oscht, sondern mit einer Metrik von 16 (d.h.. Im Beispiel auf der Folie wird dies bereits