23.4 Eine Beispielabfrage 

23.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. | einbinden der JDBC-Datenbanktreiber im Klassenpfad |
2. | unter Umständen Anmelden der Treiberklassen |
3. | Verbindung zur Datenbank aufbauen |
4. | eine SQL-Anweisung erzeugen |
5. | ausführen der SQL-Anweisung |
6. | das Ergebnis der Anweisung holen, bei Ergebnismengen über diese iterieren |
7. | schließen der Datenbankverbindung |
Wir beschränken uns im Folgenden auf die Verbindung zum freien Datenbanksystem HSQLDB.
23.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-Abfrage absetzen:
Listing 23.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.
Hinweis Es ist möglich, auch ohne ODBC-Eintrag Zugriff auf eine Access-Datenbank aufzubauen – nützlich ist das zum Beispiel dann, wenn der Name der Datenbank erst später bekannt wird. con = DriverManager.getConnection( "jdbc:odbc:Driver={Microsoft Access Driver Ein ähnlicher String kann auch für den Zugriff auf eine dBase-Datenbank genutzt werden, für die ein ODBC-Treiber angemeldet ist: jdbc:odbc:Driver={Microsoft dBase Driver (*.dbf)};DBQ=c:\database.dbf |