Fachbereich Angewandte Informatik Dipl.-Inf. Christian Pape Datenbanksysteme 2 WS 11/12 6. Übung Aufgabe 1: In dieser Übung sollen Sie eine kleine Java-Anwendung schreiben, die auf die Oracle-Datenbank zugreift. Die Kommunikation mit der Datenbank wird über JDBC realisiert. Im folgenden wird zunächst ein Projekt und eine Hauptklasse angelegt. Des weiteren müssen die entsprechenden JDBCBibliotheken des Oracle Clients dem Projekt hinzugefügt und als Abhängigkeit bekannt gemacht werden, damit diese dann auch zur Laufzeit gefunden werden. Hierzu öffnen Sie zunächst die Entwicklungsumgebung Eclipse und erzeugen mit File→New→Java Project ein neues Projekt. Jetzt erzeugen Sie eine neue Hauptklasse mit File→New→Class und nennen Sie diese ”DatenbankAbfrage”. Lassen Sie sich ausserdem die MainMethode generieren in dem Sie das entsprechende Häkchen setzen. Als nächster Schritt müssen nun die JDBC-Bibliotheken bekannt gemacht werden. Hierzu öffnen Sie mit Project→Properties die Eigenschaften Ihres Projektes. Wählen Sie nun im linken Teil des Dialogs den Punkt Java Build Path und aktivieren Sie nun den Bereich Libraries und klicken Sie auf Add External JARs. Navigieren Sie nun zu dem Ordner C:\Programme\Oracle\jdbc\lib und fügen Sie die zwei Dateien classes12.jar und nls_charset12.jar als Abhängigkeit ihrem Projekt hinzu. Wählen Sie nun den Bereich Order and Export und setzten Sie jeweils Häkchen vor die zwei neu hinzugefügten Dateien. Öffnen Sie nun Ihre Klasse DatenbankAbfrage und füllen Sie Ihre MainMethode: import import import import import java.sql.Connection; java.sql.DriverManager; java.sql.ResultSet; java.sql.SQLException; java.sql.Statement; public class DatenbankAbfrage { public static void main(String args[]) { Connection connection; Statement stmt; // Verbindung erzeugen try { DriverManager.registerDriver(new oracle.jdbc.OracleDriver()); connection = DriverManager.getConnection( "jdbc:oracle:thin:@mtsthelens.informatik.hs-fulda.de:1521:ORALV9A", "BENUTZERNAME", "PASSWORT"); stmt = connection.createStatement(); ResultSet resultSet = stmt.executeQuery("SELECT PNR, PNAME FROM PERS"); while (resultSet.next()) { System.out.println(resultSet.getInt("PNR") + "\t" + resultSet.getString("PNAME")); } stmt.close(); connection.close(); } catch (SQLException sqlException) { System.out.println("Fehler bei Abfrage!"); sqlException.printStackTrace(); } } } Ersetzen Sie dabei BENUTZERNAME und PASSWORT durch Ihre Zugangsdaten für die Datenbank. Führen Sie die Anwendung durch Run→Run As→Java Application aus. Es sollte Ihnen nun alle Personalnummern und die zugehörigen Namen ausgegeben werden. Aufgabe 2: Modifizieren Sie nun den Quelltext dahingehend, dass neben PNR und PNAME auch PGEHALT und PBONUS ausgegeben werden. import import import import import java.sql.Connection; java.sql.DriverManager; java.sql.ResultSet; java.sql.SQLException; java.sql.Statement; public class DatenbankAbfrage { public static void main(String args[]) { Connection connection; Statement stmt; // Verbindung erzeugen try { DriverManager.registerDriver(new oracle.jdbc.OracleDriver()); connection = DriverManager.getConnection( "jdbc:oracle:thin:@mtsthelens.informatik.hs-fulda.de:1521:ORALV9A", "BENUTZERNAME", "PASSWORT"); stmt = connection.createStatement(); ResultSet resultSet = stmt.executeQuery( "SELECT PNR, PNAME, PGEHALT, PBONUS FROM PERS"); while (resultSet.next()) { System.out.println(resultSet.getInt("PNR") + "\t" + resultSet.getString("PNAME") + "\t" + resultSet.getInt("PGEHALT") + "\t" + resultSet.getInt("PBONUS")); } stmt.close(); connection.close(); } catch (SQLException sqlException) { System.out.println("Fehler bei Abfrage!"); sqlException.printStackTrace(); } } } Aufgabe 3: Modifizieren Sie nun das Programm so, dass der Benutzer zur Eingabe einer PNR aufgefordert wird. Nach der Eingabe sollen alle Untergebenen mit PNR, PNAME, PGEHALT und PBONUS ausgegeben werden. Tipp: Verwenden Sie für die Eingabe am Besten einen BufferedReader in der Form BufferedReader reader = new BufferedReader( new InputStreamReader(System.in)); String zeile = reader.readLine(); und für die Anfrage an die Datenbank ein PreparedStatement. Weitere Informationen hierzu finden Sie im Package java.sql unter: http://java.sun.com/javase/6/docs/api/index.html import import import import import import import import java.sql.Connection; java.sql.DriverManager; java.sql.PreparedStatement; java.sql.ResultSet; java.sql.SQLException; java.io.BufferedReader; java.io.IOException; java.io.InputStreamReader; public class DatenbankAbfrage { public static void main(String args[]) { Connection connection; PreparedStatement stmt; // Verbindung erzeugen try { DriverManager.registerDriver(new oracle.jdbc.OracleDriver()); connection = DriverManager.getConnection( "jdbc:oracle:thin:@mtsthelens.informatik.hs-fulda.de:1521:ORALV9A", "BENUTZERNAME", "PASSWORT"); stmt = connection.prepareStatement( "SELECT PNR, PNAME,PGEHALT,PBONUS FROM PERS WHERE MNR=?"); BufferedReader reader = new BufferedReader( new InputStreamReader(System.in)); String pnr = ""; System.out.print("PNR?"); try { pnr = reader.readLine(); } catch (IOException ioException) { System.out.println("Fehler bei Eingabe!"); ioException.printStackTrace(); } stmt.setString(1, pnr); ResultSet resultSet = stmt.executeQuery(); while (resultSet.next()) { System.out.println(resultSet.getInt("PNR") + "" + resultSet.getString("PNAME") + "" + resultSet.getInt("PGEHALT") + "" + resultSet.getInt("PBONUS")); } stmt.close(); connection.close(); } catch (SQLException sqlException) { System.out.println("Fehler bei Abfrage!"); sqlException.printStackTrace(); } } }