Kapitel 9: Datenbankapplikationen - PowerPoint PPT Presentation

About This Presentation
Title:

Kapitel 9: Datenbankapplikationen

Description:

Kapitel 9: Datenbankapplikationen – PowerPoint PPT presentation

Number of Views:96
Avg rating:3.0/5.0
Slides: 41
Provided by: Olive54
Category:

less

Transcript and Presenter's Notes

Title: Kapitel 9: Datenbankapplikationen


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

3
ODBC
Open Data base connectivity
ODBC-Datenquelle
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
8
Hostvariable
  • int persnr // Personalnummer
  • char name20 // Name
  • char rang3 // Rang
  • int raum // Raum
  • char gebdatum17 // 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, raumraum_ind, gebdatum
  • EXEC SQL CLOSE C1

13
Beispiel.sqc, Teil 1
  • void ErrorHandler (void)
  • include ltstddef.hgt //
    Standardheader
  • include ltstdio.hgt //
    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 name20 //
    Name
  • char rang3 //
    Rang
  • int raum //
    Raum
  • char gebdatum17 //
    Geburtsdatum
  • short raum_ind //
    Raum-Indikator
  • char eingaberang3 //
    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
  • raumraum_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
    ("jdbcodbcdbs","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
public class JdbcApplet extends Applet
BorderLayout new Border Layout() ...
ltHTMLgt ltHEADgt ltTITLEgtJDBC
Test-Appletlt/TITLEgt lt/HEADgt ltBODY
bgColorSilvergt ltCENTERgt ltH2gt
Demo-Applet für JDBC-Datenbankzugrifflt/H2gt
ltAPPLET codebase . code
JdbcApplet width 700
height 400gt lt/APPLETgt lt/CENTERgt
lt/BODYgt lt/HTMLgt
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_na
    me") "'"
  • rs stmt.executeQuery(query)
  • out.println("ltHTMLgt")
  • out.println("ltHEADgtltTITLEgtJava Servletlt/TITLEgtlt/HE
    ADgt")
  • out.println("ltBODYgt")
  • out.println("ltH1gtVorlesungen von Prof. "
  • request.getParameter("professor_name")
    " lt/H1gt")
  • out.println("ltULgt")
  • while (rs.next())
  • out.println("ltLIgt"
  • rs.getInt("VorlNr") " "
  • rs.getString("Titel") " (mit "
  • rs.getInt("SWS") " SWS)" "lt/LIgt")
  • out.println("lt/ULgt")
  • out.println("ltBODYgtlt/HTMLgt")

24
Aufruf des Servlets
public class VrlVrz extends HttpServlet
public void doGet (HttpServletRequest request,
HttpServletResponse response)
throws ServletException,
IOException ...
ltHTMLgt ltHEADgt ltTITLEgtVorlesungsverzeichnis
mit Java Servletlt/TITLEgt lt/HEADgt ltBODYgt
ltFORM METHOD"GET" ACTION"VrlVrz"gt
Bitte geben Sie den Namen eines Professors
ein ltPgtltINPUT NAME"professor_name"
SIZE"40"gtltPgt ltINPUT TYPE"submit"
VALUE"Vorlesungen ermitteln"gt lt/FORMgt
lt/BODYgt lt/HTMLgt
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(
  • "jdbcmicrosoftsqlserver//arnold.informati
    k.uni-osnabrueck.de1433",

  • "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 (connull) return ("Probleme mit der
    Datenbank "con_err "ltBRgt")
  • 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("ltULgt")
  • while (rs.next())
  • result.append("ltLIgt"rs.getInt("VorlNr")"
    "rs.getString("Titel")
  • " (mit " rs.getInt("SWS")
    " SWS)" "lt/LIgt")
  • result.append("lt/ULgt")
  • catch(SQLException e)
  • result new StringBuffer("Bei der Abfrage
    fuer " profname

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

29
vorlesungen.jsp
  • lt_at_ page import "dbs.VorlesungenBean" gt
  • ltjspuseBean id"prg" class"dbs.VorlesungenBean"
    scope"request"/gt
  • ltjspsetProperty name"prg" property""/gt
  • lthtmlgt
  • lt if (prg.getProfname() null) gt
  • ltheadgtlttitlegtProfessoren-Namen
    erfassenlt/titlegtlt/headgt
  • ltbody bgcolor"DDDDDD"gt
  • ltFORM METHOD"GET"gt
  • Bitte geben Sie den Namen eines
    Professors einltPgt
  • ltINPUT TYPETEXT NAMEprofnamegtltPgt
  • ltINPUT TYPESUBMIT VALUE"Vorlesungen
    ermitteln!"gt
  • lt/FORMgt
  • lt/bodygt
  • lt else gt
  • ltheadgtlttitlegtVorlesungen ausgebenlt/titlegtlt/hea
    dgt
  • ltbody bgcolor"DDDDDD"gt
  • Die Vorlesungen von lt prg.getProfname()
    gt lauten ltPgt
  • lt prg.generiereVorlListe() gt

30
Datenbankapplikationen
  • MS Access
  • Embedded SQL
  • JDBC Application
  • JDBC Applet
  • Java Servlet
  • Java Server Pages
  • Cold Fusion
  • PHP

printf("Professor s", profname) System.out.pr
intln("Prof." rs.getString("name") outputArea.
append( rs.getString("name") ) out.println("ltPgt"
rs.getString("name") ) ltPgtVorlesung lt
prg.getProfname() gt ltCFOUTPUT
QUERY"q1"gtprofnamelt/CFOUTPUTgt echo
"ltPgttupel0"
31
Cold Fusion
32
studliste.cfm
  • ltCFQUERY NAME "Studentenliste"
  • USERNAME "erika"
  • PASSWORD "mustermann"
  • DATASOURCE "dbs"
  • DBTYPE "ODBC"gt
  • SELECT matrnr, name from studenten
  • lt/CFQUERYgt
  • ltHTMLgt
  • ltHEADgt
  • ltTITLEgt Studentenliste lt/TITLEgt
  • lt/HEADgt
  • ltBODYgt
  • ltH2gt Studentenliste (unformatiert)lt/H2gt
  • ltCFOUTPUT QUERY"Studentenliste"gt
  • name matrnr ltBRgt
  • lt/CFOUTPUTgt
  • lt/BODYgt
  • lt/HTMLgt

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

34
frage.html
  • ltHTMLgt
  • ltHEADgt
  • ltTITLEgtFragelt/TITLEgt
  • lt/HEADgt
  • ltBODYgt
  • ltFORM METHOD"POST" ACTION"antwort.php"gt
  • Bitte geben Sie Ihre SQL-Query ein
  • ltPgtltINPUT NAME"frage" SIZE"70"gt
  • ltPgt
  • ltINPUT TYPE"submit" VALUE"Query
    absetzen"gt
  • lt/FORMgt
  • lt/BODYgt
  • lt/HTMLgt

35
antwort.php (Teil 1)
  • ltHTMLgt
  • ltHEADgt ltTITLEgtAntwort auf Datenbank
    Querylt/TITLEgt
  • lt/HEADgt
  • ltBODY BGCOLOR"DDDDDD"gt
  • lt?php
  • conmssql_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-ScriptltPgt"
  • echo "lttable border cellpadding3gt\n"
  • echo "lttrgt"
  • for (i0 ilts i)
  • name mssql_fetch_field(rs,i)
  • echo "ltthgtname-gtnamelt/thgt"
  • echo "lt/trgt"
  • while (tupel mssql_fetch_array(rs))
  • echo "lttrgt"
  • for (i0 ilts i)
  • echo "lttdgttupelilt/tdgt"
  • echo "lt/trgt"
  • echo "lt/tablegt\n"
  • mssql_free_result(rs)
  • mssql_close(con)
  • ?gt

Demo PHP
37
balken.php
  • lt?php
  • breite zahl10
  • 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)
  • ?gt

38
semester.php (Ausschnitt)
  • frage "select name, semester from studenten
    order by name"
  • rs mssql_query(frage, con)
  • echo "lttable border1gt\n"
  • echo "ltTRgtltTHgtStudentlt/THgtltTHgtStudiendauerlt/THgtlt
    /TRgt"
  • while (tupel mssql_fetch_array(rs))
  • echo "ltTRgt"
  • echo "ltTDgttupel0lt/TDgt"
  • echo "ltTDgtltIMG SRCbalken.php?zahltupel1gtlt
    /TDgt"
  • echo "lt/TRgt\n"
  • echo "lt/tablegt\n"

Demo semester.php
39
torte.php
  • lt?php
  • include ("../jpgraph/src/jpgraph.php")
  • include ("../jpgraph/src/jpgraph_pie.php")
  • graph new PieGraph(600,400,"auto")
  • graph-gtSetShadow()
  • graph-gttitle-gtSet("Lehrbelastung der
    Professoren")
  • graph-gttitle-gtSetFont(FF_FONT1,FS_BOLD)
  • p1 new PiePlot(daten)
  • p1-gtSetLegends(namen)
  • p1-gtSetCenter(0.4)
  • graph-gtAdd(p1)
  • graph-gtStroke()
  • ?gt

40
lehre.php (Ausschnitt)
  • frage "select name, sum(sws)
  • from vorlesungen, professoren
  • where persnrgelesenvon group by name"
  • rs mssql_query(frage, con)
  • i0
  • while (tupel mssql_fetch_array(rs))
  • parameter ."nameni".tupel0.""
  • parameter ."dateni".tupel1.""
  • i
  • echo "ltIMG SRCtorte.php?parametergt"

Demo lehre.php
Write a Comment
User Comments (0)
About PowerShow.com