1 Kapitel 9: Datenbankapplikationen. 2 Datenbankapplikationen MS Access Embedded SQL JDBC Application JDBC Applet Java Servlet Java Server Pages Cold.

Slides:



Advertisements
Ähnliche Präsentationen
Object Relational Mapping
Advertisements

der Universität Oldenburg
Java-Servlets Gliederung: Allgemeine Informationen zu Servlets
1 Datenbankapplikationen 9.1MS Visio 9.2MS Access 9.3Embedded SQL 9.4JDBC 9.5Cold Fusion 9.6PHP.
Software Engineering Praktikum SS 2003
Software Engineering Praktikum WS 2002/03
PKJ 2005/1 Stefan Dissmann Vorwoche - Klasse public class Studierende { private String name, vorname, studiengang; private int matNr, semester; private.
Internet-Datenbanken
Allgemeine Technologien II
Systemüberblick Beispiele: Microsoft Access Oracle Ingres Informix
Tomcat Web-Server installieren
Internetzugriff mit Strings und Streams
JDBC & ODMG Motivation - Beispielanwendung JDBC - DriverManager - Connection - Statement - ResultSet Anwendung ODMG - Objektmodell /ODL - OQL - Java-Binding.
Java 2 Enterprise Edition (J2EE)
Anbindung an Anwendungen
Ausnahmen HS Merseburg (FH) WS 06/07.
Internet-Datenbanken Grundlagen des WWW HTML HTTP Web-Anbindung von Datenbanken Servlets JSP JDBC XML Datenmodell Schemabeschreibungssprachen Anfragesprachen.
Java: Dynamische Datentypen
FH-Hof Servlets Richard Göbel. FH-Hof Konzept Servlets werden auf der Server-Seite durch ein Formular aufgerufen werten die Eingaben aus einem Formular.
Indirekte Adressierung
FH-Hof SQLJ Richard Göbel. FH-Hof SQLJ - Idee Erweiterung von Java um SQL Die Verwendung von SQL-Anweisungen innerhalb einer Programmiersprache wird vereinfacht.
FH-Hof Verwaltung von Zeichenketten Richard Göbel.
Java: Grundlagen der Sprache
Java: Referenzen und Zeichenketten
FH-Hof Fehlerbehandlung Richard Göbel. FH-Hof Konzept Fehler können mit dem Operator throw einer übergeordneten Funktion signalisiert werden. Parameter.
Benötigte Applets Startseite: in HTML-Format Applet auf der Startseite Das Applet, das auf der Startseite geladen wird, wird die vier Buttons und die eine.
Dynamische Webseiten mit PHP
Dynamische Webseiten Java servlets.
Datenbankanwendungen mit Java und JDBC
Publikation von XML-Daten mit XSQL Pages. © Prof. T. Kudraß, HTWK Leipzig Vorteile von XSQL Pages einfache Generierung von XML-Dokumenten auf der Basis.
JDBC Konzepte Realisierung von Zugriffen
PKJ 2005/1 Stefan Dissmann Rückblick auf 2005 Was zuletzt in 2005 vorgestellt wurde: Klassen mit Attributen, Methoden und Konstruktoren Referenzen auf.
PKJ 2005/1 Stefan Dissmann Zusammenfassung Bisher im Kurs erarbeitete Konzepte(1): Umgang mit einfachen Datentypen Umgang mit Feldern Umgang mit Referenzen.
Filiale pea09 Die Einbindung der MySQL-Datenbank in das Servlet.
ansprechendes Design Übersichtlichkeit simple(selbsterklärende) Navigation unsere Credos : design programming Ltd.
JDBC -Java Database Connectivity-. 15./22. April 2004JDBC2 JDBC.... verbindet Java-Programme mit SQL-basierten Datenbanken.. liefert eine generische SQL-API.
JDBC EDV JDBC.
Kapitel 8: Web-Anwendungen mit SQL und PHP
Prof. K. Gremminger Folie 1 Vorlesung Datenbanksysteme SS 2002 Cursor-Konzept u Zugriff auf Mengen von Ergebnistupeln u In SQLJ Iteratoren u Vergleichbar.
Prof. K. Gremminger Folie 1 Vorlesung Datenbanksysteme SS 2002 Aufbau einer Verbindung zur Datenbank import java.net.URL; import java.sql.*; class JDBCExample.
JDBC: JAVA Database Connectivity
Datenmodelle, Datenbanksprachen und Datenbankmanagementsysteme
PRJ 2007/1 Stefan Dissmann Verkettete datenstruktur: Liste Problem: Liste, die eine beliebige Zahl von Elementen verwaltet Operationen: Erzeugen, Anfügen,
Einführung Servlets/JSPs
Wir bauen uns eine Webapplikation!
Applets Java für’s Web.
Learning By Doing TCP/IP Netzwerke mit TCP/IP Das Internet verwendet weitgehend das rund 30-jährige TCP/IP-Protokoll (TCP: Transmission Control Protocol,
1 Sg 3 – JSP - Java Server Pages Softwareengineering Praktikum Java Server Pages Nicole Brandstätter Josef Sturm Karl Streicher.
Javakurs FSS 2012 Lehrstuhl Stuckenschmidt
Servlets Servlets und relevantes API Servlets & SQL via JDBC Implementierungs - Spezifika Architektur Überblick Vertikaler Prototyp / Spezifikation.
SS 2004 Datenbanken 4W Mi 13:30 – 15:00 G 2.30 Vorlesung #7 SQL (Teil 2)
WS 2012/13 Datenbanksysteme Fr 15:15 – 16:45 R Vorlesung #8 SQL (Teil 5)
WS 2009/10 Datenbanksysteme Fr 15:15 – 16:45 R Vorlesung #7 SQL (Teil 4)
HORIZONT 1 XINFO ® Das IT - Informationssystem PL/1 Scanner HORIZONT Software für Rechenzentren Garmischer Str. 8 D München Tel ++49(0)89 / 540.
JDBC (Java DataBase Connectivity)
Datenbanksysteme für hörer anderer Fachrichtungen
Optimale Ursprungsgerade
Datenanbindung in Webapplikationen
CuP - Java Neunte Vorlesung Entspricht Kapitel 4.2 und 5 des Skriptums
Datenbankanbindung mit
Embedded SQL in Java Michael Stapf Berater Strategische Projekte
CuP - Java Achte Vorlesung Entspricht ungefähr Kapitel 4.1 des Skriptums Montag, 28. Oktober 2002.
Alois Schütte Advanced System Programming 2 Interprozeßkommunikation  2.1 JVM Ablaufumgebung  2.2 Java Native Interface (JNI)  Verwendung von.
WS 2014/15 Datenbanksysteme D0 15:15 – 16:45 R Vorlesung #6 SQL (Teil 3)
WS 2013/14 Datenbanksysteme Do 17:00 – 18:30 R Vorlesung #8 SQL (Teil 5)
Java-Applets und URLs APP Philip Graf, Andreas Bößl.
Ausnahmen Vorlesung besteht aus zwei Teilen Programmierung (4 SWS)
Abteilung für Telekooperation Softwareentwicklung 2 UE WS 2008/09 SE2UE_ Ausnahmen (Exceptions)
Übung Datenbanksysteme I Embedded SQL, Stored Procedures, JDBC
JDBC Java DataBase Connectivity
 Präsentation transkript:

1 Kapitel 9: Datenbankapplikationen

2 Datenbankapplikationen MS Access Embedded SQL JDBC Application JDBC Applet Java Servlet Java Server Pages Cold Fusion PHP ODBC MS Visio DQ im Client DB-Server-Protokoll DQ im Client DB-Server-Protokoll DQ im DB-Server DB-Server-Protokoll

3 Client ODBC InformixOracleMicrosoft ODBC-Datenquelle Anwendungsprogramm Open Data base connectivity Demo Systemsteuerung

4 MS Visio Demo Visio

5 MS Access Stand-alone Datenbanksystem Frontend per ODBC für relationale Datenbank Schemadesign Beziehungen Queries Beziehungen Reports Formulare Demo Access

6 Zugriff per Programmiersprachen Embedded SQL JDBC Application JDBC Applet Java Servlet Java Server Pages

7 Embedded SQL Host-Programm: hallo.pc SQL Include Files Runtime Library C Include Files Quell-Programm: hallo.c Objekt-Programm: hallo.o Ausführbares Programm: hallo.exe PräprozessorC-Compiler C-Linker

8 Hostvariable int persnr; // Personalnummer char name[20]; // Name char rang[3]; // Rang int raum; // Raum char gebdatum[17]; // Geburtsdatum short raum_ind; // Raum-Indikator Innerhalb von SQL-Statements: Doppelpunkt (:) voranstellen !

9 Select EXEC SQL SELECT persnr, raum INTO :persnr, :raum INDICATOR :raum_ind FROM Professoren WHERE PersNr = 2125; if (raum_ind == -1) printf("Personalnummer %d ohne Raumangabe \n,persnr);

10 Cursor deklarieren EXEC SQL DECLARE C1 CURSOR FOR SELECT PersNr, Name, Rang, Raum, Gebdatum FROM Professoren WHERE Rang = :eingaberang;

11 Cursor füllen + transferieren EXEC SQL OPEN C1; EXEC SQL FETCH C1 INTO :persnr, :name, :rang, :raum INDICATOR :raum_ind, :gebdatum;

12 Inhalt abarbeiten while (SQLCODE == 0) printf("%d %s %s", persnr, name, rang); if(raum_ind == -1) printf(" ???"); else printf("%4d", raum); printf(" %s\n", gebdatum); EXEC SQL FETCH C1 INTO :persnr, :name, :rang, :raum:raum_ind, :gebdatum; } EXEC SQL CLOSE C1;

13 Beispiel.sqc, Teil 1 void ErrorHandler (void); #include // Standardheader int main ( int argc, char** argv, char** envp) { EXEC SQL BEGIN DECLARE SECTION; // Deklarationen-Start char serverDatenbank[] = "arnold.uni"; // Server + DB char loginPasswort[] = "erika.mustermann"; // User + Passwort int persnr; // Personalnummer char name[20]; // Name char rang[3]; // Rang int raum; // Raum char gebdatum[17]; // Geburtsdatum short raum_ind; // Raum-Indikator char eingaberang[3]; // Eingabe vom User EXEC SQL END DECLARE SECTION; // Deklarationen-Ende

14 Beispiel.sqc, Teil 2 EXEC SQL WHENEVER SQLERROR CALL ErrorHandler(); // Fehlermarke EXEC SQL CONNECT TO :serverDatenbank // Verbindung aufbauen USER :loginPasswort; printf("Bitte Rang eingeben: "); // gewuenschten Rang scanf("%s", eingaberang); // vom user holen printf("Mit Rang %s gespeichert:\n", eingaberang); EXEC SQL DECLARE C1 CURSOR FOR // Cursor vereinbaren SELECT PersNr, Name, Rang, Raum, Gebdatum // SQL-Statement FROM Professoren WHERE Rang = :eingaberang; EXEC SQL OPEN C1; // Cursor oeffnen EXEC SQL FETCH C1 INTO :persnr, :name, :rang, // Versuche eine Zeile :raum INDICATOR :raum_ind, :gebdatum; // zu lesen

15 Beispiel.sqc, Teil 3 while (SQLCODE == 0) // SOLANGE erfolgreich { printf("%d %s %s", persnr, name, rang); // Tupel ausgeben if(raum_ind == -1) // FALLS keine Raumnr printf(" ???"); // Platzhalter drucken else printf("%4d", raum); // SONST Raumnr printf(" %s\n", gebdatum); // letztes Attribut EXEC SQL FETCH C1 INTO :persnr, :name, :rang, // naechste Zeile :raum:raum_ind, :gebdatum; } EXEC SQL CLOSE C1; // Cursor schliessen EXEC SQL DISCONNECT ALL; // Verbindung beenden return (0); }

16 Beispiel.sqc, Fehlerroutine void ErrorHandler (void) { printf("In Error Handler:\n"); printf(" SQL Code = %li\n", SQLCODE); printf(" SQL Server Message %li: '%Fs'\n", SQLERRD1, SQLERRMC); }

17 beispiel.exe Demo: beispiel.exe

18 JDBC Java-Programm mit Klassen aus java.sql läuft im Clienten Application Applet Treiber laden und Verbindung herstellen SQL-Statement ausführen Ergebnis verarbeiten

19 JDBC Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); Connection con = DriverManager.getConnection ("jdbc:odbc:dbs","erika","mustermann"); Statement stmt = con.createStatement(); ResultSet rs = stmt.executeQuery ("select * persnr, name from professoren"); while (rs.next()) { int x = rs.getInt("persnr"); String s = rs.getString("name"); System.out.println("Professor "+s+" hat Nr. "+x); }

20 JDBC Application $ Javac ShowJdbc.java $ java ShowJdbc Demo: Java ShowJdbc

21 JDBC Applet JDBC Test-Applet Demo-Applet für JDBC-Datenbankzugriff <APPLET codebase =. code =JdbcApplet width =700 height =400> public class JdbcApplet extends Applet { BorderLayout = new Border Layout();... Demo: JdbcApplet

22 Java Servlet Java-Programm mit Klassen aus javax.servlet.* läuft auf Server HTML-Form ausfüllen Argumente an Servlet schicken Servlet beantwortet Query mit JDBC Ergebnis wird als HTML zurückgeschickt

23 VorVrz.java... String query = "select v.vorlnr, v.titel, v.sws " + "from vorlesungen v, professoren p " + "where v.gelesenvon = p.persnr and p.name ='" + request.getParameter("professor_name") + "'"; rs = stmt.executeQuery(query); out.println(" "); out.println(" Java Servlet "); out.println(" "); out.println(" Vorlesungen von Prof. " + request.getParameter("professor_name") +": "); out.println(" "); while (rs.next()) out.println(" " + rs.getInt("VorlNr") + ": " + rs.getString("Titel") + " (mit " + rs.getInt("SWS") + " SWS)" + " "); out.println(" ");...

24 Aufruf des Servlets Vorlesungsverzeichnis mit Java Servlet <FORM METHOD="GET" ACTION="VrlVrz"> Bitte geben Sie den Namen eines Professors ein: public class VrlVrz extends HttpServlet { public void doGet (HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {... Demo: Servlet

25 Java Server Pages Trennung von Form und Funktionalität: Java-Klasse HTML-Seite mit Aufruf von Java-Methoden wird übersetzt zu Servlet

26 VorlesungenBean.java (Teil 1) package dbs; import java.sql.*; public class VorlesungenBean { Connection con = null; String con_err = null; String profname = null; public VorlesungenBean() { try { Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver"); con = DriverManager.getConnection( "jdbc:microsoft:sqlserver://arnold.informatik.uni-osnabrueck.de:1433", "erika","mustermann"); } catch(Exception e) { con_err = e.toString(); } } public void setProfname(String name) { profname = name; } public String getProfname() { return profname; }

27 VorlesungenBean.java (Teil 2) public String generiereVorlListe(){ Statement stmt = null; ResultSet rs = null; if (con==null) return ("Probleme mit der Datenbank: "+con_err + " "); StringBuffer result = new StringBuffer(); try{ stmt = con.createStatement(); String query = "select v.vorlnr, v.titel, v.sws from vorlesungen v, professoren p "+ "where v.gelesenvon = p.persnr and p.name ='" + profname + "'"; rs = stmt.executeQuery(query); result.append(" "); while (rs.next()) result.append(" "+rs.getInt("VorlNr")+": "+rs.getString("Titel")+ " (mit " + rs.getInt("SWS") + " SWS)" + " "); result.append(" "); } catch(SQLException e) { result = new StringBuffer("Bei der Abfrage fuer " + profname + " trat ein Fehler auf: " + e.getMessage() + " "); } return result.toString(); }

28 VorlesungenBean.java (Teil 3) public void finalize () { try {if (con != null ) con.close();} catch (SQLException ignorieren) {} } }

29 vorlesungen.jsp Professoren-Namen erfassen Bitte geben Sie den Namen eines Professors ein: Vorlesungen ausgeben Die Vorlesungen von lauten:

30 Datenbankapplikationen MS Access Embedded SQL JDBC Application JDBC Applet Java Servlet Java Server Pages Cold Fusion PHP printf("Professor %s", profname); System.out.println("Prof." + rs.getString("name"); outputArea.append( rs.getString("name") ); out.println(" " + rs.getString("name") ); Vorlesung #profname# echo " $tupel[0]";

31 Cold Fusion Web-BrowserWeb-ServerDatenbankserverApplication Server

32 studliste.cfm <CFQUERY NAME = "Studentenliste" USERNAME = "erika" PASSWORD = "mustermann" DATASOURCE = "dbs" DBTYPE = "ODBC"> SELECT matrnr, name from studenten Studentenliste Studentenliste (unformatiert) #name# #matrnr# Demo: Coldfusion

33 PHP Personal Home Page Server-basierte Scriptsprache Integriert in HTML-Seiten Grafik-Library GD

34 frage.html Frage Bitte geben Sie Ihre SQL-Query ein:

35 antwort.php (Teil 1) Antwort auf Datenbank Query <?php $con=mssql_connect("arnold", "erika", "mustermann"); mssql_select_db("uni",$con); $rs = mssql_query($frage, $con); $s = mssql_num_fields($rs);

36 antwort.php (Teil 2) echo "Antwort ermittelt durch PHP-Script: "; echo " \n"; echo " "; for ($i=0 ; $i<$s ; ++$i) { $name = mssql_fetch_field($rs,$i); echo " $name->name "; } echo " "; while ($tupel = mssql_fetch_array($rs)) { echo " "; for ($i=0 ; $i<$s ; ++$i) { echo " $tupel[$i] "; } echo " "; } echo " \n"; mssql_free_result($rs); mssql_close($con); ?> Demo: PHP

37 balken.php <?php $breite = $zahl*10; $hoehe = 30; $bild = imagecreate($breite, $hoehe); $farbe_balken = imagecolorallocate($bild, 0, 0, 255); $farbe_schrift = imagecolorallocate($bild, 255, 255, 255); ImageString($bild,3,$breite-16,8,$zahl,$farbe_schrift); header("Content-Type: image/png"); imagepng($bild); ?>

38 semester.php (Ausschnitt) $frage = "select name, semester from studenten order by name"; $rs = mssql_query($frage, $con); echo " \n"; echo " Student Studiendauer "; while ($tupel = mssql_fetch_array($rs)) { echo " "; echo " $tupel[0] "; echo " "; echo " \n"; } echo " \n"; Demo: semester.php

39 torte.php <?php include ("../jpgraph/src/jpgraph.php"); include ("../jpgraph/src/jpgraph_pie.php"); $graph = new PieGraph(600,400,"auto"); $graph->SetShadow(); $graph->title->Set("Lehrbelastung der Professoren"); $graph->title->SetFont(FF_FONT1,FS_BOLD); $p1 = new PiePlot($daten); $p1->SetLegends($namen); $p1->SetCenter(0.4); $graph->Add($p1); $graph->Stroke(); ?>

40 lehre.php (Ausschnitt) $frage = "select name, sum(sws) from vorlesungen, professoren where persnr=gelesenvon group by name"; $rs = mssql_query($frage, $con); $i=0; while ($tupel = mssql_fetch_array($rs)) { $parameter.="namen[$i]=".$tupel[0]."&"; $parameter.="daten[$i]=".$tupel[1]."&"; $i++; } echo " "; Demo: lehre.php