Teil 2 herunterladen - Universität Osnabrück

Transcription

Teil 2 herunterladen - Universität Osnabrück
Datenbanksysteme SS 2007
Frank Köster
(Oliver Vornberger)
Institut für Informatik
Universität Osnabrück
1
Kapitel 8a (Ergänzung):
Datenbankapplikationen
DB-Zugriff aus Applet
JAVA Database Connectivity – Anwendungsbeispiel
→ JDBC-Treibertyp Nummer 4 ...
JDBC-ODBC-Bridge
4
1
Direkte JDBC-Treiber
net-protocol fully JAVA technology-enabled driver …
Plattformeigene JDBC-Treiber
2
native-API partly JAVA technology-enabled driver …
3
Universelle JDBC-Treiber
native-protocol fully JAVA technology-enabled driver …
Dr. Frank Köster · Universität Oldenburg · Fakultät II · Department für Informatik · Abteilung Informationssysteme · Escherweg 2 · 26121 Oldenburg · eMail: Frank.Koester@Informatik.Uni-Oldenburg.de
3
DB-Zugriff aus Applet
JAVA Database Connectivity – Anwendungsbeispiel
→ Direkte JDBC-Treiber …
<<download>>
Client
Applet-1
Web-Server
Applet-2
Applet-3
JDBC Driver Manager
Oracle Thin JAVA Driver
DB-Server
Applet
A native-protocol fully JAVA technology-enabled driver converts JDBC technology calls into the network protocol used by
the DBMSs directly. This allows a direct call from the client machine to the DBMS server and is a practical solution for
Intranet access. Since many of these protocols are proprietary the database vendors themselves will be the primary source
for this style of driver. Several database vendors have these in progress.
Dr. Frank Köster · Universität Oldenburg · Fakultät II · Department für Informatik · Abteilung Informationssysteme · Escherweg 2 · 26121 Oldenburg · eMail: Frank.Koester@Informatik.Uni-Oldenburg.de
4
DB-Zugriff aus Applet
JAVA Database Connectivity – Anwendungsbeispiel
→ Beispielanwendung: Anmeldung, DB-Zugriff und Ergebnisdarstellung I
Dr. Frank Köster · Universität Oldenburg · Fakultät II · Department für Informatik · Abteilung Informationssysteme · Escherweg 2 · 26121 Oldenburg · eMail: Frank.Koester@Informatik.Uni-Oldenburg.de
5
DB-Zugriff aus Applet
JAVA Database Connectivity – Anwendungsbeispiel
→ Beispielanwendung: Anmeldung, DB-Zugriff und Ergebnisdarstellung IIa
Dr. Frank Köster · Universität Oldenburg · Fakultät II · Department für Informatik · Abteilung Informationssysteme · Escherweg 2 · 26121 Oldenburg · eMail: Frank.Koester@Informatik.Uni-Oldenburg.de
6
DB-Zugriff aus Applet
JAVA Database Connectivity – Anwendungsbeispiel
→ Beispielanwendung: Anmeldung, DB-Zugriff und Ergebnisdarstellung IIb
Dr. Frank Köster · Universität Oldenburg · Fakultät II · Department für Informatik · Abteilung Informationssysteme · Escherweg 2 · 26121 Oldenburg · eMail: Frank.Koester@Informatik.Uni-Oldenburg.de
7
DB-Zugriff aus Applet
JAVA Database Connectivity – Anwendungsbeispiel
→ Beispielanwendung: Anmeldung, DB-Zugriff und Ergebnisdarstellung III
Dr. Frank Köster · Universität Oldenburg · Fakultät II · Department für Informatik · Abteilung Informationssysteme · Escherweg 2 · 26121 Oldenburg · eMail: Frank.Koester@Informatik.Uni-Oldenburg.de
8
DB-Zugriff aus Applet
JAVA Database Connectivity – Anwendungsbeispiel
→ Beispielanwendung: Schema der Datenbank …
// --- Datenbank Schema -------------------------------create table
persid
vorname
name
gebdatum
);
bewohner (
int primary key,
varchar(20),
varchar(20),
date
create table
wohnid
strasse
hausnr
plz
ort
besitzer
);
wohnung (
int primary key,
varchar(20),
int,
int,
varchar(20),
varchar(20)
create table
wohnid
persid
primary
);
bewohnt (
int references wohnung(wohnid) on delete cascade,
int references bewohner(persid) on delete cascade,
key(wohnid,persid)
// ----------------------------------------------------Dr. Frank Köster · Universität Oldenburg · Fakultät II · Department für Informatik · Abteilung Informationssysteme · Escherweg 2 · 26121 Oldenburg · eMail: Frank.Koester@Informatik.Uni-Oldenburg.de
9
DB-Zugriff aus Applet
JAVA Database Connectivity – Anwendungsbeispiel
→ Beispielanwendung: JAVA-Programm (Applet) … I
import
import
import
import
import
java.sql.*;
java.applet.*;
java.awt.*;
java.awt.event.ActionListener;
java.awt.event.ActionEvent;
//
//
//
//
Zugriffsmoeglichkeiten auf Datenbank ...
Applet erstellen ....
GUI-Programmierung ...
Event-Verarbeitung ...
public class DBFunktionalitaet extends java.applet.Applet {
Connection db;
Statement st;
Graphics
g;
Button
TextField
TextField
TextArea
con_button;
uidF;
pwdF;
ta;
String
currentURL;
boolean
Color
Color
Okay;
taColorInvalid;
taColorValid;
MyEventListener listener = new MyEventListener();
Dr. Frank Köster · Universität Oldenburg · Fakultät II · Department für Informatik · Abteilung Informationssysteme · Escherweg 2 · 26121 Oldenburg · eMail: Frank.Koester@Informatik.Uni-Oldenburg.de
10
DB-Zugriff aus Applet
JAVA Database Connectivity – Anwendungsbeispiel
→ Beispielanwendung: JAVA-Programm (Applet) … II
public void init() {
// Parameter des Applets einlesen:
currentURL = getParameter("myurl");
g = this.getGraphics();
MyEventListener listener = new MyEventListener();
try {
// Initialisierung ...
this.setBackground(java.awt.Color.LIGHT_GRAY);
taColorInvalid = new Color(250,199,199);
taColorValid
= new Color(199,250,199);
Panel id_panel = new Panel();
id_panel.setBackground(java.awt.Color.LIGHT_GRAY);
id_panel.setLayout(new FlowLayout());
// Button fuer Aktion:
con_button = new Button("Verbinden ...");
// Button & ButtonName
con_button.addActionListener(listener);
id_panel.add(con_button);
// Eingabe des UserName:
id_panel.add(new Label("UserName", Label.RIGHT)); // Label
uidF = new TextField(8);
id_panel.add(uidF);
// ...
Dr. Frank Köster · Universität Oldenburg · Fakultät II · Department für Informatik · Abteilung Informationssysteme · Escherweg 2 · 26121 Oldenburg · eMail: Frank.Koester@Informatik.Uni-Oldenburg.de
11
DB-Zugriff aus Applet
JAVA Database Connectivity – Anwendungsbeispiel
→ Beispielanwendung: JAVA-Programm (Applet) … III
// ...
// Eingabe des Password:
id_panel.add(new Label("Password", Label.RIGHT)); // Label
pwdF = new TextField(8);
pwdF.setEchoChar('*');
id_panel.add(pwdF);
Panel id_panel2 = new Panel();
id_panel2.setBackground(java.awt.Color.LIGHT_GRAY);
id_panel2.setLayout(new FlowLayout());
// Textfeld fuer Aktion:
ta = new TextArea("", 26, 82);
ta.setBackground(java.awt.Color.LIGHT_GRAY);
id_panel2.add(ta);
// TextArea
add("North", id_panel);
add("North", id_panel2);
} catch( Exception e ) {
e.printStackTrace();
}
}
Dr. Frank Köster · Universität Oldenburg · Fakultät II · Department für Informatik · Abteilung Informationssysteme · Escherweg 2 · 26121 Oldenburg · eMail: Frank.Koester@Informatik.Uni-Oldenburg.de
12
DB-Zugriff aus Applet
JAVA Database Connectivity – Anwendungsbeispiel
→ Beispielanwendung: JAVA-Programm (Applet) … IV
private void aufloesenUNDinitialisieren() throws SQLException {
st.executeUpdate("delete from wohnung");
st.executeUpdate("delete from bewohnt");
st.executeUpdate("delete from bewohner");
st.executeUpdate(
"insert into bewohner (persid, vorname, name)values(45553,'Inge', 'Schmidt')");
}
private void teilaufgabe2() throws SQLException {
st.executeUpdate(
"insert into wohnung (wohnid,strasse,hausnr,plz,ort,besitzer) \\
values(1,'Phantasiegasse',23,55555,'Beispielstadt','Meine-Wohnung GmbH')");
}
Dr. Frank Köster · Universität Oldenburg · Fakultät II · Department für Informatik · Abteilung Informationssysteme · Escherweg 2 · 26121 Oldenburg · eMail: Frank.Koester@Informatik.Uni-Oldenburg.de
13
DB-Zugriff aus Applet
JAVA Database Connectivity – Anwendungsbeispiel
→ Beispielanwendung: JAVA-Programm (Applet) … V
private void teilaufgabe3() throws SQLException {
PreparedStatement ps;
java.sql.Date datum;
ps = db.prepareStatement(
"insert into bewohner (persid,vorname,name,gebdatum) values (?,?,?,?)");
ps.setInt(1,1); ps.setString(2,"Peter"); ps.setString(3,"Meyer");
datum = new java.sql.Date(67, 0, 21);
ps.setDate(4,datum);
ps.executeUpdate();
ps.setInt(1,2); ps.setString(2,"Luise"); ps.setString(3,"Müller");
datum = new java.sql.Date(74, 8, 25);
ps.setDate(4,datum);
ps.executeUpdate();
ps = db.prepareStatement("insert into bewohnt (wohnid, persid) values(?,?)");
ps.setInt(1,1);
ps.setInt(2,1);
ps.executeUpdate();
ps.setInt(2,2);
ps.executeUpdate();
ps.close();
}
Dr. Frank Köster · Universität Oldenburg · Fakultät II · Department für Informatik · Abteilung Informationssysteme · Escherweg 2 · 26121 Oldenburg · eMail: Frank.Koester@Informatik.Uni-Oldenburg.de
14
DB-Zugriff aus Applet
JAVA Database Connectivity – Anwendungsbeispiel
→ Beispielanwendung: JAVA-Programm (Applet) … VI
private void teilaufgabe4() throws SQLException {
st.executeUpdate("update bewohner set name='Meyer' where persid=45553");
}
private void teilaufgabe5() throws SQLException {
ResultSet rs = st.executeQuery(
"select b.persid, b.name, b.vorname, w.strasse, w.hausnr, w.plz, w.ort \\
from bewohner b, wohnung w, bewohnt bw where w.wohnid=bw.wohnid and \\
b.persid=bw.persid");
while(rs.next()) {
ta.append("(ID="+rs.getInt("persid")+")\n");
ta.append(rs.getString("name")+", "+rs.getString("vorname")+"\n");
ta.append(rs.getString("strasse")+" "+rs.getString("hausnr")+",
"+rs.getString("plz")+" "+rs.getString("ort")+"\n\n");
System.out.println("PersID: " + rs.getInt("persid"));
}
ta.append("\n");
}
Dr. Frank Köster · Universität Oldenburg · Fakultät II · Department für Informatik · Abteilung Informationssysteme · Escherweg 2 · 26121 Oldenburg · eMail: Frank.Koester@Informatik.Uni-Oldenburg.de
15
DB-Zugriff aus Applet
JAVA Database Connectivity – Anwendungsbeispiel
→ Beispielanwendung: JAVA-Programm (Applet) … VII
class MyEventListener implements ActionListener {
public void actionPerformed (ActionEvent ae) {
String arg = ((Button) ae.getSource()).getLabel();
char
arg0 = arg.charAt(0);
if (arg0 == 'V') {
DBFunktionalitaet DBF;
try {
DBF = new DBFunktionalitaet();
} catch (Exception e) {
System.out.println("Fehler:");
e.printStackTrace();
}
// g.setColor(java.awt.Color.LIGHT_GRAY);
// g.fillRect(0,450,639,479);
ta.setText("Verarbeitung läuft ...");
ta.setBackground(java.awt.Color.LIGHT_GRAY);
Okay = true;
// ...
Dr. Frank Köster · Universität Oldenburg · Fakultät II · Department für Informatik · Abteilung Informationssysteme · Escherweg 2 · 26121 Oldenburg · eMail: Frank.Koester@Informatik.Uni-Oldenburg.de
16
DB-Zugriff aus Applet
JAVA Database Connectivity – Anwendungsbeispiel
→ Beispielanwendung: JAVA-Programm (Applet) … VIII
// ...
System.out.println ("Laden des ORACLE-Treibers ...");
try {
Class.forName ("oracle.jdbc.driver.OracleDriver");
} catch (ClassNotFoundException e) {
System.out.println ("Treiber konnte nicht geladen werden!");
e.printStackTrace();
}
System.out.println ("Laden des Treibers erfolgreich!");
String userURL = "jdbc:oracle:thin:@" + currentURL;
System.out.println ("UserURL ist: "+userURL);
try {
db = DriverManager.getConnection(userURL,uidF.getText(),pwdF.getText());
st = db.createStatement();
// Vorbereitung und Teilaufgaben ...
aufloesenUNDinitialisieren();
ta.setText("Initialisierung durch User '"+uidF.getText()+
"' auf '"+currentURL+"' erfolgt.\n\n\n");
// ...
Dr. Frank Köster · Universität Oldenburg · Fakultät II · Department für Informatik · Abteilung Informationssysteme · Escherweg 2 · 26121 Oldenburg · eMail: Frank.Koester@Informatik.Uni-Oldenburg.de
17
DB-Zugriff aus Applet
JAVA Database Connectivity – Anwendungsbeispiel
→ Beispielanwendung: JAVA-Programm (Applet) … IX
// ...
teilaufgabe2();
ta.append("Update Nr. 1 in Teilaufgabe 2 durch User '"+uidF.getText()+
"' auf '"+currentURL+"'.\n");
teilaufgabe3();
ta.append("Update Nr. 2 (mehrere) in Teilaufgabe 3 durch User '"+
uidF.getText()+"' auf '"+currentURL+"'.\n");
teilaufgabe4();
ta.append("Update Nr. 3 (mehrere) in Teilaufgabe 4 durch User '"+
uidF.getText()+"' auf '"+currentURL+"'.\n\n\n");
teilaufgabe5();
ta.append("Anzeigeoperation Nr. 1 aus Teilaufgabe 5 durch User '"+
uidF.getText()+"' auf '"+currentURL+"' bearbeitet.\n");
st.close();
db.close();
} catch (SQLException e) {
Okay = false;
System.out.println ("Fehler bei Ausfuehrung!");
e.printStackTrace();
}
// ...
Dr. Frank Köster · Universität Oldenburg · Fakultät II · Department für Informatik · Abteilung Informationssysteme · Escherweg 2 · 26121 Oldenburg · eMail: Frank.Koester@Informatik.Uni-Oldenburg.de
18
DB-Zugriff aus Applet
JAVA Database Connectivity – Anwendungsbeispiel
→ Beispielanwendung: JAVA-Programm (Applet) … X
// ...
if (!Okay) {
ta.setBackground(taColorInvalid);
ta.setText("");
// g.setColor(java.awt.Color.RED);
// g.drawString("Fehler bei Ausfuehrung!",10,465);
} else {
ta.setBackground(taColorValid);
// g.setColor(java.awt.Color.GREEN);
// g.drawString("OKAY!",10,465);
System.out.println ("Abarbeitung erfolgreich!");
}
}
}
}
Dr. Frank Köster · Universität Oldenburg · Fakultät II · Department für Informatik · Abteilung Informationssysteme · Escherweg 2 · 26121 Oldenburg · eMail: Frank.Koester@Informatik.Uni-Oldenburg.de
19
DB-Zugriff aus Applet
JAVA Database Connectivity – Anwendungsbeispiel
→ Beispielanwendung: HTML-Seite …
<html>
<head><title>Übung zu Datenbanken und WWW ...</title></head>
<body bgcolor="#A7B7DB">
<div align="center"><center>
<table border="0" cellspacing="0" cellpadding="0" height="100%" width="100%">
<tr><td valign="middle" align="center">
<table align="center" cellspacing="0" cellpadding="0" border="0" >
<tr><td><h1>Übung zu Datenbanken und WWW ...</h1></tr></td>
<tr><td><hr></tr></td>
<tr><td><table align="center" cellspacing="0" cellpadding="0" border="1" >
<tr><td><applet codebase="file://C:/JAVA--Test/"
archive="file://C:/j2sdk/jdbc/lib/classes12.zip"
code="DBFunktionalitaet.class" width=640 height=480>
<param name="myurl"
value="apfel.offis.uni-oldenburg.de:1521:swlis9i">
</applet></tr></td></table>
</td></tr>
<tr><td><hr></tr></td>
<tr><td><a href="DBFunktionalitaet.java">Quellcode anzeigen ...</a></tr></td>
</table>
</td></tr>
</table>
</center></div>
</body>
</html>
Dr. Frank Köster · Universität Oldenburg · Fakultät II · Department für Informatik · Abteilung Informationssysteme · Escherweg 2 · 26121 Oldenburg · eMail: Frank.Koester@Informatik.Uni-Oldenburg.de
20
DB-Zugriff aus Applet
JAVA Database Connectivity – Anwendungsbeispiel
→ Beispielanwendung: Anmeldung, DB-Zugriff und Ergebnisdarstellung III
<<download>>
Client
Applet-1
Web-Server
Applet-2
Applet-3
JDBC Driver Manager
Oracle Thin JAVA Driver
DB-Server
Applet
Dr. Frank Köster · Universität Oldenburg · Fakultät II · Department für Informatik · Abteilung Informationssysteme · Escherweg 2 · 26121 Oldenburg · eMail: Frank.Koester@Informatik.Uni-Oldenburg.de
21
Datenbanksysteme SS 2007
Ende von Kapitel 8a (Ergänzung):
Datenbankapplikationen
22