Kap. 9

Werbung
Datenbankapplikationen
9.1
9.2
9.3
9.4
9.5
9.6
MS Visio
MS Access
Embedded SQL
JDBC
Cold Fusion
PHP
1
voraussetzen
PK,FK2
PK,FK1
MS Visio
Studenten
PK
hoeren
MatrNr
PK,FK1
PK,FK2
Name
Semester
GebDatum
pruefen
PK,FK2
PK,FK3
MatrNr
VorlNr
FK1
PersNr
Note
MatrNr
VorlNr
Vorgaenger
Nachfolger
Vorlesungen
PK
VorlNr
FK1
Titel
SWS
gelesenVon
Professoren
PK
PersNr
Name
Rang
Raum
Gebdatum
U1
Assistenten
PK
FK1
PersNr
Name
Fachgebiet
Boss
GebDatum
2
MS Access
Frontend per ODBC
Queries interaktiv
Queries in SQL-Form
Beziehungen
Reports
Formulare
3
Embedded SQL
Host-Programm:
hallo.pc
SQL Include Files
Pre-Compiler
Quell-Programm:
hallo.c
C-Compiler
Objekt-Programm:
C Include Files
hallo.o
C-Linker
Ausführbares Programm:
Runtime Library
hallo.exe
4
Hostvariable
int
char
char
int
char
persnr;
name[20];
rang[3];
raum;
gebdatum[17];
//
//
//
//
//
Personalnummer
Name
Rang
Raum
Geburtsdatum
short
raum_ind;
// Raum-Indikator
Innerhalb von SQL-Statements:
Doppelpunkt (:) voranstellen !
5
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);
6
Cursor deklarieren
EXEC SQL DECLARE C1 CURSOR FOR
SELECT PersNr, Name, Rang, Raum, Gebdatum
FROM Professoren
WHERE Rang = :eingaberang;
7
Cursor füllen + transferieren
EXEC SQL OPEN C1;
EXEC SQL FETCH C1 INTO
:persnr,
:name,
:rang,
:raum INDICATOR :raum_ind,
:gebdatum;
8
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;
9
Beispiel.sqc, Teil 1
void ErrorHandler (void);
#include <stddef.h>
// Standardheader
#include <stdio.h>
// 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 10
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
SELECT PersNr, Name, Rang, Raum, Gebdatum
FROM Professoren
WHERE Rang = :eingaberang;
// Cursor vereinbaren
// SQL-Statement
EXEC SQL OPEN C1;
EXEC SQL FETCH C1 INTO :persnr, :name, :rang,
:raum INDICATOR :raum_ind, :gebdatum;
// Cursor oeffnen
// Versuche eine Zeile
// zu lesen
11
Beispiel.sqc, Teil 3
while (SQLCODE == 0)
{
printf("%d %s %s", persnr, name, rang);
if(raum_ind == -1)
printf(" ???");
else
printf("%4d", raum);
printf(" %s\n", gebdatum);
// SOLANGE erfolgreich
// Tupel ausgeben
// FALLS keine Raumnr
// Platzhalter drucken
// SONST Raumnr
// letztes Attribut
EXEC SQL FETCH C1 INTO :persnr, :name, :rang, // naechste Zeile
:raum:raum_ind, :gebdatum;
}
EXEC SQL CLOSE C1;
EXEC SQL DISCONNECT ALL;
return (0);
}
// Cursor schliessen
// Verbindung beenden
12
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);
}
13
JDBC
Java-Programm mit Klassen aus java.sql
Erzeuge Java-Code für
• Application
• Applet
•
•
•
Treiber laden und Verbindung herstellen
SQL-Statement ausführen
Ergebnis verarbeiten
14
JDBC
Class.forName(“sun.jdbc.odbc.JdbcOdbcDriver“);
Connection con = DriverManager.getConnection
(“jdbc:odbc:dbs2001“,“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);
}
15
ColdFusion
16
PHP
•
•
•
Personal Home Page
Server-basierte Scriptsprache
Integriert in HTML-Seiten
17
frage.html
<HTML>
<HEAD>
<TITLE>Frage</TITLE>
</HEAD>
<BODY>
<FORM METHOD="POST" 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>
18
<HTML>
antwort.html
(Teil 1)
<HEAD>
<TITLE>Antwort</TITLE>
</HEAD>
<BODY>
<H2>Antwort ermittelt durch PHP-Script:</H2>
<?php
$con = mssql_connect("MSSQL","erika","mustermann");
mssql_select_db("uni",$con);
$rs = mssql_query($frage, $con);
$z = mssql_num_rows($rs);
$s = mssql_num_fields($rs);
19
echo "<table border>\n";
echo "<tr>";
for ($i=0 ; $i<$s ; ++$i) {
$name = mssql_fetch_field($rs,$i);
echo "<th>$name->name</th>";
}
echo "</tr>";
while ($tupel = mssql_fetch_array($rs)) {
echo "<tr>";
for ($i=0 ; $i<$s ; ++$i) {
echo "<td>$tupel[$i]</td>";
}
echo "</tr>";
}
echo "</table>\n";
mssql_free_result($rs);
mssql_close($con);
antwort.html (Teil 2)
?>
</BODY>
</HTML>
20
Herunterladen