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