Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

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

Ähnliche Präsentationen


Präsentation zum Thema: "1 Kapitel 9: Datenbankapplikationen. 2 Datenbankapplikationen MS Access Embedded SQL JDBC Application JDBC Applet Java Servlet Java Server Pages Cold."—  Präsentation transkript:

1 1 Kapitel 9: Datenbankapplikationen

2 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 3 Client ODBC InformixOracleMicrosoft ODBC-Datenquelle Anwendungsprogramm Open Data base connectivity Demo Systemsteuerung

4 4 MS Visio Demo Visio

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

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

7 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 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 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 10 Cursor deklarieren EXEC SQL DECLARE C1 CURSOR FOR SELECT PersNr, Name, Rang, Raum, Gebdatum FROM Professoren WHERE Rang = :eingaberang;

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

12 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 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 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 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 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 17 beispiel.exe Demo: beispiel.exe

18 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 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 20 JDBC Application $ Javac ShowJdbc.java $ java ShowJdbc Demo: Java ShowJdbc

21 21 JDBC Applet JDBC Test-Applet Demo-Applet für JDBC-Datenbankzugriff public class JdbcApplet extends Applet { BorderLayout = new Border Layout();... Demo: JdbcApplet

22 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 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 24 Aufruf des Servlets Vorlesungsverzeichnis mit Java Servlet

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 25 Java Server Pages Trennung von Form und Funktionalität: Java-Klasse HTML-Seite mit Aufruf von Java-Methoden wird übersetzt zu Servlet

26 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 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 28 VorlesungenBean.java (Teil 3) public void finalize () { try {if (con != null ) con.close();} catch (SQLException ignorieren) {} } }

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

30 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 31 Cold Fusion Web-BrowserWeb-ServerDatenbankserverApplication Server

32 32 studliste.cfm SELECT matrnr, name from studenten Studentenliste Studentenliste (unformatiert) #name# #matrnr# Demo: Coldfusion

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

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

35 35 antwort.php (Teil 1) Antwort auf Datenbank Query

36 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 37 balken.php

38 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 39 torte.php 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 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


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

Ähnliche Präsentationen


Google-Anzeigen