Datenbanksysteme 2015



Ähnliche Dokumente
Kapitel 9: Datenbankapplikationen

Java Server Pages (JSP)

6.9 Java Server Pages

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

Datenbanksysteme 2015

php Hier soll ein Überblick über das Erstellen von php Programmen gegeben werden. Inhaltsverzeichnis 1.Überblick Parameterübergabe...

Java Database Connectivity (JDBC) Walther Rathenau Gewerbeschule 1

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

Praktikum Datenbanksysteme. Ho Ngoc Duc IFIS Universität zu Lübeck

Java zur Realisierung von Internetanwendungen

Dynamische Webseiten mit PHP. Oder: LAMP - The open way

Datenbanksysteme SS 2007

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

Einleitung JavaServer Pages Erweiterungsmechanismen Beispiel Fazit. JavaServer Pages. Seminar Webprogrammierung WS04/05. Timothy Burk. 6.

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

Übungen. DI (FH) Levent Öztürk

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

Java zur Realisierung von Internetanwendungen

Oracle: Abstrakte Datentypen:

Java - Webapplikationen

Interaktive Webseiten mit PHP und MySQL

Kapitel 5 Serverseitige Technologien

Einführung in die Scriptsprache PHP

Überblick über Internet-Technologien

Beispiel: DB-Mock (1/7)

7. Datenbank-Zugriff. Vorlesung und Übung Dr. Peter Pfahler Institut für Informatik Universität Paderborn. Zum Beispiel aus PHP-Skripten: Client 7-2

Projekt Online-Shop:

Internetanbindung von Datenbanken

Übungen zu Datenbanksysteme

Fakultät für Informatik & Wirtschaftsinformatik DB & IS II SS 2015 PHP MVC. Dr. Christian Senger. PHP MVC 1 von 21

MySQL, Java und einiges mehr

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

Grundlagen der Informatik 2

Einführung in PHP und MySQL

Datenbanksysteme noch Kapitel 7: SQL Vorlesung vom Oliver Vornberger. Institut für Informatik Universität Osnabrück

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

Erstellung eines Frameworks für Shop Systeme im Internet auf Basis von Java

FHZ. Servlets/JSP. Lernziele. Hochschule Technik+Architektur Luzern. Inhalt

Datenbanksysteme noch Kapitel 7: SQL. Vorlesung vom Oliver Vornberger. Institut für Informatik Universität Osnabrück

TYPO3 und TypoScript

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

mit Musterlösungen Prof. Dr. Gerd Stumme, Dipl.-Inform. Christoph Schmitz 11. Juni 2007

JSP, Tomcat, JDBC. Agenda. Übung Informationsintegration JSP & Tomcat JDBC. l Syntax. l Implizite Objekte. l Direktiven

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

Multimedia im Netz Wintersemester 2011/12

E-Commerce: IT-Werkzeuge. Web-Programmierung. Kapitel 6: Datenbankabfragen mit SQL und PHP. Stand: Übung WS 2014/2015

Internetanbindung von Datenbanken

Verteidigung gegen SQL Injection Attacks

Datenbanken: Servlets und JSP

Java zur Realisierung von Internetanwendungen

Programmieren II. Wie kommen Daten von einem Webserver? Vorlesung 12. Handout S. 1. Martin Schultheiß. Hochschule Darmstadt Sommersemester 2011

Unsere Webapplikation erweitern

PHP. Prof. Dr.-Ing. Wolfgang Lehner. Diese Zeile ersetzt man über: Einfügen > Kopf- und

FileMaker und PHP Workshop

JDBC. Allgemeines ODBC. java.sql. Beispiele

Es wird das Struts <html:option> Element erläutert und anhand von kleinen Beispielen der Umgang veranschaulicht.

Java: MySQL-Anbindung mit JDBC.

ASP: Active Server Pages

Softwaretechnik Teil Webprogrammierung (HTML, PHP) SS2011

Client/Server-Programmierung

PHP und MySQL. Integration von MySQL in PHP. Zellescher Weg 12 Willers-Bau A109 Tel Michael Kluge (michael.kluge@tu-dresden.

Datenbanken & Informationssysteme Übungen Teil 1

Oracle & Java HOW TO

Kommunikationsnetze. 7. Das World Wide Web 7.4 Client- vs. Server-basierte Techniken für dynamische Webseiten

Folgendes PL/SQL Codefragment zeigt das grundlegende Statement für diesen Test: Java.

Web- Applikationen. in Java-Web

Zugriff auf Firebird-Datenbanken mit PHP. Daniel de West DB-Campus-Treffen 15. Januar 2004

Datenbanksysteme 2013

Webbasierte Informationssysteme

WEBAPPLIKATIONEN MIT PHP. Wo gibt es Hilfe? Wie fang ich an?

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

Webanwendungen mit Java

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

Java Server Pages 2 und Benutzerdefinierte Tags. Strahil Yordanov

Kapitel DB:VI (Fortsetzung)

Einführung in Javadoc

Transkript:

Datenbanksysteme 2015 noch Kapitel 09: Datenbankapplikationen Oliver Vornberger Institut für Informatik Universität Osnabrück

Datenbankapplikationen MS Visio MS Access Embedded SQL im C-Programm JDBC / SQLJ Application SQLite / HSQLDB JDBC Applet Java Servlet Java Server Pages PHP Ruby on Rails CouchDB

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 JDBC Browser Webserver Servlet DBS frage.html VorVrz.java VorVrz.class Apache Tomcat Server http://dbs.informatik.uos.de:8180/

frage.html <html> <head> <title>vorlesungsverzeichnis mit Java Servlet</title> </head> <body> <form method="get" action="vrlvrz"> Bitte geben Sie den Namen eines Professors ein: <p><input name="professor_name" size="40"> <p><input type="submit" value="vorlesungen ermitteln"> </form> </body> </html>

VorVrz.java (Anfang Ende) public class VrlVrz extends HttpServlet { public void doget (HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { Connection con = null; Statement stmt = null; ResultSet rs = null; response.setcontenttype("text/html"); PrintWriter out = response.getwriter(); try { catch(classnotfoundexception e) { out.println("datenbanktreiber nicht gefunden: " + e.getmessage()); catch(sqlexception e) { out.println("sqlexception: " + e.getmessage()); finally { try { if (con!= null ) con.close(); catch (SQLException ignorieren) {

VorVrz.java (Mitte) Class.forName("com.mysql.jdbc.Driver"); con = DriverManager.getConnection( "jdbc:mysql://dbs.informatik.uni-osnabrueck.de/uniweb", "erika", "mustermann"); 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 ='" + request.getparameter("professor_name") + "'"; rs = stmt.executequery(query); out.println("<html>"); out.println("<head><title>java Servlet</TITLE></HEAD>"); out.println("<body>"); out.println("<h1>vorlesungen von Prof. " + request.getparameter("professor_name") +": </H1>"); out.println("<ul>"); while (rs.next()) out.println("<li>" + rs.getint("vorlnr") + ": " + rs.getstring("titel") + " (mit " + rs.getint("sws") + " SWS)" + "</LI>"); out.println("</ul>"); out.println("<body></html>"); VrlVrz.java servlet.html

SQL-Injection Obacht: User-Eingabe nicht ungefiltert an den SQL-Interpreter weiterreichen! "select * from Professoren where p.name ='" + request.getparameter("professor_name") + "'"; Eingabe Sokrates erzeugt select * from Professoren where name='sokrates'; Eingabe Sokrates';delete from Professoren where name='kant erzeugt select * from Professoren where name='sokrates'; delete from Professoren where name='kant';

<%@ page import="java.sql.*" %> <%! String vorlesungstitel() { String url = "jdbc:mysql://dbs.informatik.uos.de/uniweb"; String user = "erika"; String passwd = "mustermann"; StringBuffer s = new StringBuffer(); try { Class.forName("com.mysql.jdbc.Driver"); catch(java.lang.classnotfoundexception e) { System.err.println(e.getMessage()); System.exit(0); try{ Connection con = DriverManager.getConnection(url,user,passwd); Statement stmt = con.createstatement(); ResultSet rs = stmt.executequery("select * from Vorlesungen"); s.append("<ul>"); while (rs.next()) { s.append("<li>"); s.append(rs.getstring("titel")); s.append("</li>"); s.append("</ul>"); catch(sqlexception ex) { System.err.println("SQLException: " + ex.getmessage()); return s.tostring(); %> <HTML> <HEAD><TITLE>Vorlesungstitel</TITLE></HEAD> <BODY> <H2>alle Vorlesungstitel</H2> <%= vorlesungstitel() %> </BODY> </HTML> Java Server Page http://dbs.informatik.uos.de:8180/vorlesungstitel/vorlesungstitel.jsp

Java Server Pages Trennung von Form und Funktionalität: HTML-Seite mit Aufruf von Java-Methoden Java-Klasse mit Methoden DBS Webserver wird übersetzt zu Servlet benutzt Bean vorlesungen.jsp vorlesungenbean.java Browser

Syntax der JSP-Seite In den HTML-Code ist eingebettet <%@ Page Direktive %> <%! Java-Deklaration %> <%= Java-Ausdruck %> <% Java-Codefragment %> <%-- Kommentar %> <html> <head><title>hello World</title></head> <body> <h1><%= prg.generierevorlliste() %></h1> </body> </html>

vorlesungen.jsp <%@ page import = "dbs.vorlesungenbean" %> <jsp:usebean id="prg" class="dbs.vorlesungenbean" scope="request"/> <jsp:setproperty name="prg" property="*"/> <html> <% if (prg.getprofname() == null) { %> <head><title>professoren-namen erfassen</title></head> <body bgcolor="dddddd"> <FORM METHOD="GET"> Bitte geben Sie den Namen eines Professors ein:<p> <INPUT TYPE=TEXT NAME=profname><P> <INPUT TYPE=SUBMIT VALUE="Vorlesungen ermitteln!"> </FORM> </body> <% else { %> <head><title>vorlesungen ausgeben</title></head> <body bgcolor="dddddd"> Die Vorlesungen von <%= prg.getprofname() %> lauten: <P> <%= prg.generierevorlliste() %> </body> <% %> </html> Alle Request- Parameter werden an gleichnamige Setter- Methoden übergeben. profname wird übergeben an setprofname(string name) http://dbs.informatik.uos.de:8180/vorlesungen/vorlesungen.jsp

VorlesungenBean.java (Teil 1) package dbs; import java.sql.*; public class VorlesungenBean { Connection con; String error; String profname; public VorlesungenBean() { String url = "jdbc:mysql://dbs.informatik.uos.de/uniweb"; String user = "erika"; String passwd = "mustermann"; try { Class.forName("com.mysql.jdbc.Driver"); con = DriverManager.getConnection(url, user, passwd); catch(exception e) { error = e.tostring(); public void setprofname(string name) { profname = name; public String getprofname() { return profname;

VorlesungenBean.java (Teil 2) public String generierevorlliste() { Statement stmt = null; ResultSet rs = null; if (con==null) return "Probleme mit der Datenbank: "+error+"<br/>"; 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("<ul>"); while (rs.next()) result.append("<li>" + rs.getint("vorlnr") + ": " + rs.getstring("titel") + " (mit " + rs.getint("sws") + " SWS)" + "</li>"); result.append("</ul>"); catch(sqlexception e) { result.append("bei der Abfrage fuer " +profname+ " trat ein Fehler auf: " + e.getmessage() + "<br />"); return result.tostring(); Bean: Servlet: http://www-lehre.inf.uos.de/~dbs/2015/java/vorlesungenbean.java http://www-lehre.inf.uos.de/~dbs/2015/java/vorlesungen_jsp.java

Active Server Pages (ASP) Microsoft Internet Information Server Visual Basic for Applications jetzt ASP.NET <html> <body> <% response.write("hello World!") %> </body> </html>

PHP Personal Home Page (seit 1995) Server-basierte Scriptsprache (82 % aller Serverscripte) Integriert in HTML-Seiten PEAR (PHP Extension and Application Repository, 1999) GD-Library (in C geschrieben, Schnittstelle zu PHP) JpGraph-Library (in PHP geschrieben) http://www.selfphp.de/ http://pear.php.net/ http://www.boutell.com/gd/ http://jpgraph.net/

matrix.php <HTML> <HEAD><TITLE>Matrix</TITLE></HEAD> <BODY BGCOLOR="DDDDDD"> <CENTER> <H1>Matrix</H1> <TABLE> <? for ($i=0; $i<10; $i++){ echo "<tr>"; for ($j=0; $j<10; $j++){ echo "<TD>", $i, $j, "</TD>"; echo "</TR>\n";?> </TABLE> </CENTER> </BODY> </HTML> http://www-lehre.inf.uos.de/~dbs/2015/php/matrix.php

eingabe.html <HTML> <HEAD><TITLE>Eingabe</TITLE></HEAD> <BODY BGCOLOR="DDDDDD"> <center> <H1>Hier kommt die Eingabe...</H1> <FORM METHOD="GET" ACTION="ausgabe.php" > Bitte geben Sie eine Zahl ein:<p> <INPUT name="zahl" size="2" > <INPUT TYPE="submit" VALUE="Abschicken!"> </FORM> </center> </BODY> </HTML> http://www-lehre.inf.uos.de/~dbs/2015/php/eingabe.html

ausgabe.php <HTML> <HEAD><TITLE>Ausgabe</TITLE> </HEAD> <BODY BGCOLOR="DDDDDD"> <CENTER> <H1>... und hier kommt die Ausgabe:</H1> <? $z = $_GET['zahl']; for ($i=1; $i<=10; $i++) { echo $i, " mal ", $z, " = ", $i*$z, "<BR>";?> </CENTER> </BODY> </HTML>

frage.html <HTML> <HEAD> <TITLE>Frage</TITLE> </HEAD> <BODY> <FORM METHOD="GET" ACTION="antwort.php"> Bitte geben Sie Ihre SQL-Query ein: <P><INPUT NAME="frage" SIZE="70"> <P> <INPUT TYPE="submit" VALUE="Query absetzen"> </FORM> </BODY> </HTML> http://dbs.informatik.uos.de/media2mult/php/frage.html http://dbs.informatik.uos.de/media2mult/php/antwort.php?frage=select+name+from+professoren Pfad auf dbs: /var/www/media2mult

<html> <head> <title>antwort auf DB-Query</title> </head> antwort.php [Teil 1] <body bgcolor="#dddddd"> <?php require_once 'MDB2.php'; $dsn = array( 'phptype' => 'mysql', 'username' => 'erika', 'password' => 'mustermann', 'hostspec' => 'dbs.informatik.uni-osnabrueck.de', 'database' => 'UniWeb', ); $con = MDB2::connect($dsn); if (PEAR::isError($con)) die($con->getmessage()); $result = $con->query($_request['frage']); if (PEAR::isError($result)) die($result->getmessage()); hat Zugriff auf GET und POST

$s = $result->numcols(); $header = $result->getcolumnnames(); echo "<table border=\"2\" cellpadding=\"3\">\n"; echo "<tr>"; for ($i = 0; $i < $s; $i++) { echo "<td>".ucfirst(key($header))."</td>"; next($header); echo "</tr>\n"; while($row = $result->fetchrow()) { echo "<tr>"; for($i = 0; $i < $s; $i++) echo "<td>$row[$i]</td>"; echo "</tr>\n"; echo "</table>\n"; $result->free(); $con->disconnect();?> </body> </html> antwort.php [Teil 2]

assistenten.ihtml <HTML> <HEAD><TITLE>Auflistung der Assistenten</TITLE> </HEAD> <BODY BGCOLOR="#BCDEEF"> <TABLE border=1 cellspacing=4 > <TR> <TH>Name</TH><TH>Fachgebiet</TH><TH>Betreuer</TH> </TR> <!-- BEGIN zeile --> <TR> <TD>{Name</TD> <TD>{Fachgebiet</TD> <TD>{Betreuer</TD> </TR> <!-- END zeile --> </TABLE> </BODY> </HTML> Block Variable

assistenten.php [Teil 1] <?php require_once 'MDB2.php'; require_once 'HTML/Template/PHPLIB.php'; $dsn = array ("phptype" => "mysql", "username" => "erika", "password" => "mustermann", "hostspec" => "dbs.informatik.uni-osnabrueck.de", "database" => "UniWeb", ); $con =& MDB2::connect($dsn); if (PEAR::isError($con)) die ($con->getmessage()); $sql = "SELECT a.name AS Name, a.fachgebiet AS Fachgebiet, p.name AS Betreuer FROM Assistenten a, Professoren p WHERE a.boss = p.persnr"; $result = $con->query($sql); if (PEAR::isError($result)) die ($result->getmessage());

assistenten.php [Teil 2] handle für Datei Block handle für Block $template = new HTML_Template_PHPLIB(); $template->setfile("assistenten", "assistenten.ihtml"); $template->setblock("assistenten", "zeile", "row"); while($row = $result->fetchrow(mdb2_fetchmode_assoc)) { foreach($row as $field => $value) { $template->setvar($field, $value); $template->parse("row", "zeile", true); $template->pparse("output", "assistenten"); $result->free(); $con->disconnect();?> http://dbs.informatik.uos.de/media2mult/php/assistenten.php

semester.ihtml <html> <head> <title>berechnung von dynamischen Grafiken</title> </head> <body> <table border="1"> <tr> <th>student</th><th>studiendauer</th> </tr> <!-- BEGIN zeile --> <tr> <td>{name</td><td>{grafik</td> </tr> <!-- END zeile --> </table> </body> </html>

balken.php <?php $breite = $_GET['zahl'] * 10; $hoehe = 30; $bild = imagecreate($breite, $hoehe); imagecolorallocate($bild, 0, 0, 255); $farbe_schrift = imagecolorallocate($bild, 255, 255, 255); ImageString($bild, 3, $breite - 16, 8, $_GET['zahl'], $farbe_schrift); header ("Content-Type: image/png"); imagepng($bild);?> Font x-pos y-pos http://dbs.informatik.uos.de/media2mult/php/balken.php?zahl=8

semester.php [Teil 1] <?php require_once 'MDB2.php'; require_once 'HTML/Template/PHPLIB.php'; $dsn = array( 'phptype' => 'mysql', 'username' => 'erika', 'password' => 'mustermann', 'hostspec' => 'dbs.informatik.uni-osnabrueck.de', 'database' => 'UniWeb', ); $con =& MDB2::connect($dsn); if (PEAR::isError($con)) die($con->getmessage()); $sql = "SELECT name, semester FROM Studenten ORDER BY name"; $result = $con->query($sql); if (PEAR::isError($result)) die($result->getmessage());

semester.php [Teil 2] $template = new HTML_Template_PHPLIB(); $template->setfile("semester", "semester.ihtml"); $template->setblock("semester", "zeile", "row"); while($row = $result->fetchrow()) { $template->setvar("name", $row[0]); $template->setvar("grafik", "<img src=\"./balken.php?zahl=$row[1]\">"); $template->parse("row", "zeile", true); $template->pparse("output", "semester"); $result->free(); $con->disconnect();?> http://dbs.informatik.uos.de/media2mult/php/semester.php

lehre.html <html> <head> <title>lehrbelastung der Professoren</title> </head> <body bgcolor="silver"> <img src="./torte.php"> </body> </html>

torte.php [Teil 1] <?php require_once './jpgraph-2.3.4/src/jpgraph.php'; require_once './jpgraph-2.3.4/src/jpgraph_pie.php'; require_once 'MDB2.php'; $dsn = array( 'phptype' => 'mysql', 'username' => 'erika', 'password' => 'mustermann', 'hostspec' => 'dbs.informatik.uni-osnabrueck.de', 'database' => 'UniWeb', ); $con =& MDB2::connect($dsn); if (PEAR::isError($con)) die($con->getmessage()); $sql = "SELECT name, SUM(sws) FROM Vorlesungen, Professoren WHERE persnr = gelesenvon GROUP BY name"; $result = $con->query($sql); if (PEAR::isError($result)) die($result->getmessage());

torte.php [Teil 2] $i = 0; while($row = $result->fetchrow()) { $namen[$i] = $row[0]; $daten[$i] = $row[1]; $i++; $result->free(); $con->disconnect(); $graph = new PieGraph(600, 400, "auto"); $graph->setshadow(); $graph->title->set("lehrbelastung der Professoren"); $graph->title->setfont(ff_font1, FS_BOLD); $pl = new PiePlot($daten); $pl->setlegends($namen); $graph->add($pl); $graph->stroke();?> http://dbs.informatik.uos.de/media2mult/php/lehre.html Sprung zur Zusammenfassung

Zusammenfassung MS Access CouchDB JDBC Application SQLJ JDBC Applet Java Servlet Java Server Pages PHP function(doc){...emit(doc.produkte[produkt]);... ResultSet rs = stmt.execute(query); #sql {select name, rang into :name, :rang outputarea.append(rs.getstring("name")); out.println("<td>"+rs.getstring("name")+"</td>"); <TD>Vorlesung von <%= prg.getprofname() %> </TD> echo "<td>$row[$i]</td>";