22.4 Eine Beispielabfrage 

22.4.1 Schritte zur Datenbankabfrage 

Wir wollen kurz die Schritte skizzieren, die für einen Zugriff auf eine relationale Datenbank mit JDBC erforderlich sind:
1. | Installieren der JDBC-Datenbanktreiber |
2. | Eine Verbindung zur Datenbank über den entsprechenden JDBC-Treiber für das verwendete DBMS aufbauen |
3. | Eine SQL-Anweisung erzeugen |
4. | Ausführen der SQL-Anweisung |
5. | Das Ergebnis der Anweisung holen |
6. | Schließen der Datenbankverbindung |
Wir beschränken uns im Folgenden auf die Verbindung zum freien Datenbanksystem HSQLDB.
22.4.2 Client für HSQLDB-Datenbank 

Ein Beispiel soll zu Beginn die Programmkonzepte für JDBC veranschaulichen, bevor wir im Folgenden das Java-Programm weiter sezieren. Das Programm in der Klasse FirstSqlAccess nutzt die Datenbank TutegoDB, die sich im Suchpfad befinden muss; wir können ebenso absolute Pfade bei HSQLDB angeben, etwa C:/TutegoDB. Bei der Parametrisierung »jdbc:hsqldb: file« von HSQLDB liest die Datenbank beim ersten Start die Daten aus der Datei ein, verwaltet sie im Speicher und schreibt sie am Ende des Programms wieder in eine Datei zurück.
Da wir die Datenbank schon früher mit Demo-Daten gefüllt haben, lässt sich jetzt eine SQL-SELECT-Anfrage absetzen:
Listing 22.1 com/tutego/insel/jdbc/FirstSqlAccess.java
package com.tutego.insel.jdbc; import java.sql.*; public class FirstSqlAccess { public static void main( String[] args ) { try { Class.forName( "org.hsqldb.jdbcDriver" ); } catch ( ClassNotFoundException e ) { System.err.println( "Keine Treiber-Klasse!" ); return; } Connection con = null; try { con = DriverManager.getConnection( "jdbc:hsqldb:file:TutegoDB;shutdown=true", "sa", "" ); Statement stmt = con.createStatement(); // stmt.executeUpdate( "INSERT INTO CUSTOMER VALUES(50,'Christian','Ullenboom', // 'Immengarten 6','Hannover')" ); ResultSet rs = stmt.executeQuery( "SELECT * FROM Customer" ); while ( rs.next() ) System.out.printf( "%s, %s %s%n", rs.getString(1), rs.getString(2), rs.getString(3) ); rs.close(); stmt.close(); } catch ( SQLException e ) { e.printStackTrace(); } finally { if ( con != null ) try { con.close(); } catch ( SQLException e ) { e.printStackTrace(); } } } }
Dem Beispiel ist in diesem Status schon die aufwändige Fehlerbehandlung anzusehen. Das Schließen vom ResultSet und Statement ist vereinfacht, aber okay, weil das finally auf jeden Fall die Connection schließt.
con = DriverManager.getConnection( "jdbc:odbc:Driver={Microsoft Access Driver (*.mdb)};DBQ=c:/daten/test.mdb" ,"name", "pass" ); |