Aufgabenblatt zur Vorlesung von Prof. Sauer 10. Aufgabenblatt 1. Aufgabe Schreibe und implementiere eine Java-Anwendung mit der JDBC, die die Tabellen der OracleDatenbank „Personal“ benutzt und diese Tabelle in einem angemessenen Format auf dem Textbildschirm ausgibt. Die Ausgabe der Tabelle soll über die SQL-Query eingegeben werden und auf folgende Eingabe jeweils eine der Tabellen der Datenbank „Personal“ ausgeben: SELECT * FROM ANGESTELLTE; SELECT * FROM ABTEILUNG; SELECT * FROM JOB; Das folgende Bild zeigt den Ablauf der der Anwendung: 2. Aufgabe Schreibe und implementiere eine Java-Anwendung mit der JDBC, die die Tabellen der OracleDatenbank „Personal“ benutzt und damit folgende Ausgabe in eine Textdatei erzeugt: ANG_ID A1 A10 A12 A13 A14 A2 A3 A4 A5 A6 A7 A8 A9 NAME Fritz Willi Anton Josef Maria Tom Werner Gerd Emil Uwe Erna Rita Ute GEBDATUM 02.01.50 07.07.56 05.07.48 02.08.52 17.11.64 02.03.51 23.01.48 03.11.55 02.03.60 03.04.52 17.11.55 02.12.57 08.09.62 BEZEICHNUNG Organisation und Datenverarbeitung Konstruktion Organisation und Datenverarbeitung Konstruktion Personalabteilung Konstruktion Organisation und Datenverarbeitung Vertrieb Personalabteilung Rechenzentrum Konstruktion Konstruktion Organisation und Datenverarbeitung TITEL Systemplaner Ingenieur Systemplaner Systemplaner Kaufm. Angestellter Ingenieur Programmierer Kaufm. Angestellter Programmierer Operateur Techn. Angestellter Techn. Angestellter Systemplaner 3. Aufgabe Schreibe und implementiere eine JDBC-Anwendung mit folgender Funktionalität: 1 Aufgabenblatt zur Vorlesung von Prof. Sauer - Löschen aus der Tabelle „angestellte“ der Datenbank „Personal“ die Datensätze (Tupel) mit der ANG_ID = „A12“ und mit der ANG_ID = „A14“ - Einfügen der soeben gelöschten Datensätze in die Tabelle. 4. Aufgabe Schreibe und implementiere eine Java-Anwendung, die ein Java-Applet umfasst, das folgendes Fenster erzeugt: Nach dem Drücken der Schaltfläche „HelloJDBC“ soll in das Listenfeld eine Information ausgegeben werden, die anzeigt, ob die Verbindung zur Datenbank erfolgreich war, z.B.: 2 Aufgabenblatt zur Vorlesung von Prof. Sauer Lösungen 1. Aufgabe import java.io.*; import java.sql.*; class Personal { public static void main (String args[]) throws SQLException, ClassNotFoundException, IOException { // Class.forName("oracle.jdbc.driver.OracleDriver"); //Oracle-Treiber laden Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); // DriverManager.registerDriver (new oracle.jdbc.driver.OracleDriver ()); System.out.println("Bitte gib Informationen zur DB-Verbindung ein."); // String user = readEntry("User: "); // String passwort = readEntry("Passwort: "); // String db = readEntry("DB: "); String query = readEntry("SQL-Query: "); String user = "saj39122"; String passwort = "saj39122"; System.out.println("Connecting..."); //auf die Datenbank connecten Connection conn = DriverManager.getConnection // ("jdbc:oracle:thin:@rfhpc8003:1521:ora815","scott","tiger"); // ("jdbc:oracle:@ora815","scott","tiger"); ("jdbc:odbc:ora815","saj39122","saj39122"); System.out.println("Connected\n"); // Create a statement Statement stmt = conn.createStatement (); // Execute the query System.out.println("Executing query " + query + "\n"); ResultSet rset = stmt.executeQuery(query); ResultSetMetaData rmd = rset.getMetaData(); int anz_spalten = rmd.getColumnCount(); int anz_zeichen = 0; for (int i = 1; i <= anz_spalten; i++) { System.out.print(rmd.getColumnName(i) + "\t"); anz_zeichen += rmd.getColumnName(i).length(); } System.out.println(); for (int j = 1; j <= anz_zeichen; j++) System.out.print("-"); System.out.println("----------------"); while (rset.next() ) { for (int i = 1; i <= anz_spalten; i++) { String wort = rset.getString(i); if (rmd.getColumnTypeName(i).equals("DATE")) wort = wort.substring(0,10); System.out.print(wort + "\t"); } System.out.println(); } } static String readEntry(String prompt) { try { StringBuffer puffer = new StringBuffer(); System.out.println(prompt); System.out.flush(); int c = System.in.read(); while (c != '\n' && c != -1) { puffer.append((char)c); c = System.in.read (); } return puffer.toString(); } catch (IOException e) { return ""; 3 Aufgabenblatt zur Vorlesung von Prof. Sauer } } } 2. Aufgabe import java.sql.*; import java.io.*; public class AngJobAbt { public static void main(String[] args) throws SQLException, ClassNotFoundException, IOException { // Class.forName("oracle.jdbc.driver.OracleDriver"); Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); DriverManager.registerDriver (new oracle.jdbc.driver.OracleDriver ()); System.out.println("Bitte gib Informationen zur DB-Verbindung ein."); String user = readEntry("User: "); String passwort = readEntry("Passwort: "); String db = readEntry("DB: "); System.out.println(db); System.out.println("Connecting..."); Connection conn = DriverManager.getConnection ( /* "jdbc:oracle:thin:" +user +"/"+ passwort +"@rfhs8012.fh-regensburg.de:1521:ora8i" */ // "jdbc:odbc:" + db, user, passwort "jdbc:odbc:ora815","saj39122","saj39122" ); System.out.println("Connected\n"); // Create a statement Statement stmt = conn.createStatement (); // Textdatei vorbereiten (zur Ausgabe) PrintWriter f = new PrintWriter( new BufferedWriter( new FileWriter("angjobabt.txt")),true); // Execute the query ResultSet rs = stmt.executeQuery ( "select ang_id, name, to_char(gebdatum,'dd.mm.yy') GebDatum, bezeichnung, titel" + " from angestellte, abteilung, job" + " where angestellte.abt_id = abteilung.abt_id and angestellte.job_id = job.job_id" + " order by ang_id"); ResultSetMetaData rmd= rs.getMetaData(); int anzspalten=rmd.getColumnCount(); for(int i = 1; i <= anzspalten; i++) { System.out.print(rmd.getColumnName(i)); f.print(rmd.getColumnName(i)); if (rmd.getColumnDisplaySize(i) < rmd.getColumnName(i).length()) { f.print(" "); } else { for (int j = 1; j <= (rmd.getColumnDisplaySize(i)-rmd.getColumnName(i).length()); j++) { System.out.print(" "); f.print(" "); } System.out.print(" "); f.print(" "); } } System.out.println(); f.println(); while(rs.next()) { for ( int i = 1; i <= anzspalten; i++) { String wort = rs.getString(i); System.out.print(wort); f.print(wort); if (rmd.getColumnDisplaySize(i) < rmd.getColumnName(i).length()) { for (int j = 1; j <= (rmd.getColumnName(i).length() - wort.length() + 1); j++) { f.print(" "); } } else { for (int j = 1; j <= (rmd.getColumnDisplaySize(i) - wort.length()); j++) { System.out.print(" "); f.print(" "); 4 Aufgabenblatt zur Vorlesung von Prof. Sauer } System.out.print(" "); f.print(" "); } // System.out.print(rmd.getColumnDisplaySize(i)); } System.out.println(); f.println(); } } static String readEntry( String prompt) { try { StringBuffer puffer = new StringBuffer(); System.out.print(prompt); System.out.flush(); int c= System.in.read(); while ( c!='\n' && c != -1) { puffer.append((char) c); c=System.in.read(); } return puffer.toString(); } catch (IOException e) { return ""; } } } 3. Aufgabe /* * This sample shows how to insert data in a table. */ // You need to import the java.sql package to use JDBC import java.sql.*; class InsertBsp { public static void main (String args []) throws SQLException { // Load the Oracle JDBC driver // DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver()); try { // Class.forName("oracle.jdbc.driver.OracleDriver"); Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); } catch (Exception e) { System.out.println ("Fehler: " + e.getMessage () + "\n"); } // Connect to the database // You can put a database name after the @ sign in the connection URL. Connection conn = DriverManager.getConnection // ("jdbc:oracle:oci8:@", "scott", "tiger"); ("jdbc:odbc:ora815","saj39122","saj39122"); // Prepare a statement to cleanup the emp table Statement stmt = conn.createStatement (); try { stmt.execute ("delete from ANGESTELLTE where ANG_ID = 'A14'"); } catch (SQLException e) { // Ignore an error here } try { stmt.execute ("delete from ANGESTELLTE where ANG_ID = 'A12'"); } catch (SQLException e) { // Ignore an error here too } // Close the statement 5 Aufgabenblatt zur Vorlesung von Prof. Sauer stmt.close(); // Prepare to insert new names in the EMP table PreparedStatement pstmt = conn.prepareStatement( "insert into ANGESTELLTE (ANG_ID, NAME, GEBDATUM, ABT_ID, JOB_ID) values (?, ?, ?, ?, ?)"); // Add Maria as ang_id A14 pstmt.setString (1, "A14"); pstmt.setString (2, "Maria"); Date datum = new Date(64,11,17); pstmt.setDate(3, datum); pstmt.setString(4,"PA"); pstmt.setString(5,"KA"); // Do the insertion pstmt.execute (); // The first ? is for ANG_ID // The second ? is for NAME // The third ? is for GEBDATUM // The 4th // The 5th ? is for ABT_ID ? is for JOB_ID // Add Anton as ang_id A12 pstmt.setString (1, "A14"); // The first ? is for ANG_ID pstmt.setString (2, "Anton"); // The second ? is for NAME Date datum2 = new Date(48,07,05); // The third ? is for GEBDATUM pstmt.setDate(3, datum2); pstmt.setString(4,"OD"); pstmt.setString(5,"SY"); // Do the insertion pstmt.execute (); // Close the statement pstmt.close(); // Close the connecion conn.close(); } } 4. Aufgabe /* * This sample applet just selects 'Hello World' and the date from the database */ // Import the JDBC classes import java.sql.*; // Import the java classes used in applets import java.awt.*; import java.awt.event.*; import java.io.*; import java.util.*; public class HalloJdbcAnw extends java.applet.Applet { // The driver to load static final String driver_class = "sun.jdbc.odbc.driver.JdbcOdbcDriver"; // The connect string /* static final String connect_string = "jdbc:oracle:thin:saj39122/[email protected]:1521:ora8i"; */ // This is the kind of string you woudl use if going through the // Oracle 8 connection manager which lets you run the database on a // different host than the Web Server. See the on-line documentation // for more information. // The query we will execute static final String query = "select 'Hallo JDBC: ' || sysdate from dual"; // The button to push for executing the query Button execute_button; // The place where to dump the query result TextArea output; // The connection to the database Connection conn; // Create the User Interface public void init () 6 Aufgabenblatt zur Vorlesung von Prof. Sauer { this.setLayout (new BorderLayout ()); Panel p = new Panel (); p.setLayout (new FlowLayout (FlowLayout.LEFT)); execute_button = new Button ("Hello JDBC"); p.add (execute_button); this.add ("North", p); output = new TextArea (10, 60); this.add ("Center", output); } // Do the work public boolean action (Event ev, Object arg) { if (ev.target == execute_button) { try { // Clear the output area // Diese setText Anweisung initialisiert TextArea mit leerem String! //output.setText (""); // See if we need to open the connection to the database if (conn == null) { // Load the JDBC driver output.append ("Loading JDBC driver " + driver_class + "\n"); // Class.forName (driver_class); // Connect to the databse // output.append ("Registering...\n"); // DriverManager.registerDriver (new oracle.jdbc.driver.OracleDriver ()); try { // Class.forName("oracle.jdbc.driver.OracleDriver"); Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); } catch (Exception e) { System.out.println ("Fehler: " + e.getMessage () + "\n"); } // Connect to the database // You can put a database name after the @ sign in the connection URL. output.append ("Connecting to "/* + connect_string */ + "\n"); conn = DriverManager.getConnection // ("jdbc:oracle:oci8:@ora815", "scott", "tiger"); ("jdbc:odbc:ora815","scott","tiger"); // conn = DriverManager.getConnection (connect_string); output.append ("Connected\n"); } // Create a statement Statement stmt = conn.createStatement (); // Execute the query output.append ("Executing query " + query + "\n"); ResultSet rset = stmt.executeQuery (query); // Dump the result while (rset.next ()) output.append (rset.getString (1) + "\n"); // We're done output.append ("done.\n"); } catch (Exception e) { output.append ("Fehler: " + e.getMessage () + "\n"); } return true; } else return false; } public static void main(String args[]) { Frame meinFenster = new Frame(); HalloJdbcAnw halloJdbc = new HalloJdbcAnw(); meinFenster.addWindowListener(new WindowAdapter() { 7 Aufgabenblatt zur Vorlesung von Prof. Sauer public void windowClosing(WindowEvent e) { System.exit(0); } }); meinFenster.add("Center",halloJdbc); halloJdbc.init(); halloJdbc.start(); meinFenster.setSize(500,200); meinFenster.setVisible(true); } } 8