Datenbank im Internet - Beuth Hochschule für Technik Berlin

Werbung
Datenbank im Internet
13 Datenbank im Internet
Für das Internet haben wir die Situation, dass die Oberfläche entfernt auf einem Client als HTML-Seite läuft und mit
den beiden restlichen Schichten kommuniziert werden muss. Zur Abwicklung dieser Kommunikation werden zwei
Zusatzprogramme, der Web-Server (hier Apache) und der Web-Client (hier Explorer), benötigt.
Als Quellen wurden benutzt: [1] Balzert für die Installation, [10] Turau für die Realisierung, und [12] für die
(kostenlose) SW.
Client
Server
Oberfläche
Web-Browser
Web-Server
Programme
Datenbank
Dazu muss zunächst der Web-Server installiert werden. Der Web-Client ist wahrscheinlich bereits installiert.
Für den Betrieb sind notwendig: starten des Web-Servers
in: C:\Dokumente und Einstellungen\Steyer\Startmenü\Programme\Apache Tomcat 4.1
Plazierung einer jsp-Seite im ROOT-Verzeichnis
In: C:\Programme\Apache Group\Tomcat 4.1\webapps\ROOT
Aufruf einer Seite im Browser
http://localhost:8080/eins.jsp
stoppen des Web-Servers
in: C:\Dokumente und Einstellungen\Steyer\Startmenü\Programme\Apache Tomcat 4.1
Datenbankzugriff: Tabelle nur anzeigen (Aufruf einer Seite ohne Parameter)
Die wichtigsten (hier benötigten) HTML-Tags sind
<body>
Beginn der Seitenbeschreibung
<table>
Beginn der Tabellenbeschreibung
<tr>
Beginn einer Zeilenbeschreibung einer Tabelle
<td>
Beginn einer Wertebeschreibung einer Zeile in einer Tabelle
<%>
Beginn eines Programmstückes zur Interpretation durch den Web-Server
Es wird eine HTML-Seite angefordert, die noch aktuell dynamisch mit Datenbankdaten gefüllt werden muss.
Für den Datenbankzugriff gelten die wesentlichen fünf Schritte aus Kapitel 2. Liegen die Daten vor, muss die
angeforderte Seite zusammengebaut werden.
db1.jsp:
<%@ page errorPage="errorpge.jsp"
import="java.sql.*" session="false" %>
<html>
<body>
<%
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
Connection c = DriverManager.getConnection("jdbc:odbc:accessdb","","");
Statement stmt = c.createStatement();
final String query = "Select pnr, pname from person";
ResultSet rs = stmt.executeQuery(query);
%>
<table border="1" bgcolor="#CCFFF" cellpadding="3" cellspacing="0">
<tr>
<% int i = 1;
while (rs.next()) {%>
<tr><td align="center"><%= i%></td>
<td><%= rs.getString(1)%></td>
<td><%= rs.getString(2)%></td>
</tr>
<% i++;} %>
</table>
<% rs.close();
c.close();
%>
</body>
</html>
Datenbankzugriff: bestimmte Tabellenwerte anzeigen (Aufruf einer Seite mit Parameterübergabe)
Hier werden dem Datenbankzugriff noch Parameter mitgegeben. Diese werden vor der Seitenanforderung in eine
Formularseite eingebenen und an den Server übermittelt. Dieser holt sie mit request.getParameter("<Variable>")
ab. Der Rest läuft ab wie oben.
bsp2.jsp:
<html>
<body>
<h1>Kontostand abfragen</h1>
<form method = "GET" action="http://localhost:8080/bsp2db.jsp">
Name:
<input type = "text" name = "us">
<br><br>
<input type = "submit" value="Kontostand">
</form>
</body>
</html>
bsp2db.jsp:
<%@ page errorPage="errorpge.jsp"
import="java.sql.*" session="false" %>
<html>
<body>
<%String us = request.getParameter("us");%>
<%
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
Connection c = DriverManager.getConnection("jdbc:odbc:accessdb","","");
Statement stmt = c.createStatement();
final String query = "Select kundenname, pin, kontostand from kunde where kundenname = \'" + us + "\'";
ResultSet rs = stmt.executeQuery(query);
%>
<table border="1" bgcolor="#CCFFF" cellpadding="3" cellspacing="0">
<% while (rs.next()) {%>
<tr><td><%= rs.getString(1)%></td>
<td><%= rs.getString(2)%></td>
<td><%= rs.getString(3)%></td>
</tr>
<%}%>
</table>
<% rs.close();
c.close();
%>
</body>
</html>
Datenbankzugriff: gesamten SQL-Befehl ausführen lassen (Aufruf einer Seite mit Parameterübergabe)
Hier ist neu, dass nicht einzelne Parameter ein- und übergeben werden, sondern ein ganzer SQL-Befehl. Dieser
wird zum Server übermittelt, wo die beiden Fälle 1) Datenbankzugriff mit Datenrückgabe (select, s. Kapitel 3) oder
2) Datenbankzugriff ohne Datenrückgabe (insert, update, delete usw. s.Kapitel 4) unterschieden werden. Der Fall 1
läuft wie oben, im Fall 2 wird der SQL-Befehl nur ausgeführt.
bsp3.jsp:
<html>
<body>
<h1>SQL-Befehl ausführen</h1>
<form method = "GET" action="http://localhost:8080/bsp3db.jsp">
<input type = "text" name = "bef" size=50>
<br><br>
<input type = "submit" value="ausführen">
</form>
</body>
</html>
bsp3db.jsp:
<%@ page errorPage="errorpge.jsp"
import="java.sql.*" session="false" %>
<html>
<body>
<%String bef = request.getParameter("bef");%>
<% if (bef.indexOf("select") <= 0) { %>
<%
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
Connection c = DriverManager.getConnection("jdbc:odbc:accessdb","","");
Statement stmt = c.createStatement();
ResultSet rs = stmt.executeQuery(bef);
ResultSetMetaData rsmd = rs.getMetaData();
int n = rsmd.getColumnCount();
%>
<h3>n=</h3>
<%=n%>
<table border="1" bgcolor="#CCFFF" cellpadding="3" cellspacing="0">
<% while (rs.next()) {%>
<tr>
<%int i=1;%>
<% while (i <= n) { %>
<td><%=rs.getString(i) %></td>
<%i++; }%>
</tr>
<%}%>
</table>
<% rs.close();
c.close();
} else {
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
Connection c = DriverManager.getConnection("jdbc:odbc:accessdb","","");
Statement stmt = c.createStatement();
stmt.execute(bef);
} %>
</body>
</html>
Diese Kommandounterscheidung ist ziemlich grob. Selbstverständlich müsste der Server individueller
kommandoweise reagieren. Das aber würde den Rahmen des Buches sprengen. Es sollte hier nur das Prinzip
gezeigt werden. Auf diese Weise können SQL-Oberflächen im Internet für beliebige Datenbanksysteme realisiert
werden.
TFH Berlin/Steyer
Herunterladen