/* Beispiel zur Abfrage einer Datenbank mit Java / JDBC Hier nochmals der Befehl zum Uebersetzen... javac -cp $CLASSPATH:IOulm.jar:mysql-connector-java-5.1.7-bin.jar DatenbankDemo.java ... und zum Ausfuehren java -cp $CLASSPATH:IOulm.jar:mysql-connector-java-5.1.7-bin.jar DatenbankDemo Stellt bei Uebersetzen und Ausfuehren des Programms bitte sicher, dass sich sowohl die Datei IOulm.jar als auch der mysql-connector in dem Verzeichnis befinden, in dem auch der Programmtext liegt. nh - 01/2009 */ import java.sql.*; import IOulm.*; public class DatenbankDemo { // Konstanten, die fuer den Verbindungsaufbau benoetigt werden public static final String HOST = "orso.mathematik.uni-ulm.de"; public static final String DATABASE = "flensburg"; public static final String USER = "glis"; public static final String PASSWORD = "infsys08"; private static Connection conn = null; // Aufbau der Verbindung zur Datenbank // Was hier passiert ist nicht wesentlich fuer das Verstaendnis // des eigentlichen Beispiels public static Connection connectToDB() { if (conn == null) { try { Class.forName("com.mysql.jdbc.Driver"); // Treiber laden } catch (Exception e) { Write.Line("Konnte den Treiber nicht laden: " + e); return null; } // Verbindung zur Datenbank eroeffnen (unter Verwendung der // Konstanten, die oben definiert wurden) try { String url = "jdbc:mysql://" + HOST + "/" + DATABASE + "?user=" + USER + "&password=" + PASSWORD; conn = DriverManager.getConnection(url); } catch (SQLException e) { Write.Line("Konnte Verbindung nicht aufbauen: " + e); return null; } } return conn; } // eine einfache Abfrage, die nur die (verschiedenen) Firmen aus der // Tabelle "Company" in der Datenbank zu blatt08 holt public static void getCompanies() { ResultSet rs = null; // ein ganz normales SQL-Statement wird als String angelengt String query = "select NAME from Company;"; // Abfrage durchfuehren und im Fehlerfall eine Meldung ausgeben try { Statement stmt = conn.createStatement(); rs = stmt.executeQuery(query); // Abfrage ausfuehren } catch (SQLException e) { Write.Line("Die Abfrage <" + query + "> war nicht erfolgreich!" + e); } catch (NullPointerException e) { Write.Line("Habe NULL-Pointer-Exception erhalten! " + e); } // Die Abfrageergebnisse landen in einem Objekt (rs = ResultSet), // und die while-Schleife holt alle Eintraege dort heraus. try { while (rs.next()) { Write.Line(rs.getString("NAME")); // NAME ist Spaltenbezeichnung } } catch (SQLException e) { Write.Line("OOPS, ein Fehler: " + e); } } // Eine weitere Abfrage (die auf der Datenbank "flensburg" arbeitet!) // Der Benutzer wird nach dem Laenderkuerzel gefragt, fuer das die // Abfrage ausgefuehrt werden soll; danach findet dann die Abfrage statt public static void getCarsByCountry() { // Interaktion mit dem Benutzer Write.Line("Welches Land soll gesucht werden?"); Urc.readString(); String country = Urc.getString(); Write.Line("Okay, hier kommen alle Autos aus " + country + ":"); // Abfrage vorbereiten und ausfuehren ResultSet rs = null; String query = "select H.name, M.typbezeichnung from Hersteller H, Modelle M where H.land = ? and M.h_id = H.h_id order by H.name, M.typbezeichnung;"; // Abfrage durchfuehren und im Fehlerfall eine Meldung ausgeben try { PreparedStatement stmt = conn.prepareStatement(query); stmt.setString(1, country); // Fragezeichen durch Land ersetzen rs = stmt.executeQuery(); } catch (SQLException e) { Write.Line("Die Abfrage <" + query + "> war nicht erfolgreich!" + e); } catch (NullPointerException e) { Write.Line("Habe NULL-Pointer-Exception erhalten! " + e); } try { while (rs.next()) { String brand = rs.getString("NAME"); String model = rs.getString("TYPBEZEICHNUNG"); Write.Line(brand + " " + model); } } catch (SQLException e) { Write.Line("OOPS, ein Fehler: " + e); } } public static void main(String[] args) { // Verbindung zur Datenbank herstellen conn = connectToDB(); // Erste Abfrage: Anzeige der verschiedenen Companies //getCompanies(); // Abfrage ausfuehren // Zweite Abfrage (ACHTUNG: Vorher Datenbank abaendern (flensburg)!) getCarsByCountry(); // Abfrage ausfuehren... } }