5. JDBC - Java Database Connectivity

Die Java Database Connectivity ist eine standardisierte Schnittstelle zur Anbindung von relationalen Datenbanken an Java. Sie entstand aus der Schnittstelle ODBC - Open Database Connectivity nachdem Java immer beliebter für die Webprogrammierung wurde. Die SQL-Anweisungen werden als dynamisch generierbare Text-Strings an das Datenbanksystem übergeben. Der große Vorteil von JDBC ist, dass wenn auf Erweiterungen von anderen Datenbanksystemen verzichtet wird, ein leicht portierbares Programm erstellt werden kann, dass auch auf mehrere unterschiedliche Datenbanken zugreifen kann.

Bevor nun ein Java-Programm mit einer Datenbank kommunizieren kann, muss eine Verbindung aufgebaut werden. Hierfür wird der DriverManager gebraucht, der die JDBC-Treiber verwaltet und im Paket java.sql enthalten ist, dass wiederum im Java-Programm eingebunden werden muss. Es müssen die notwendigen JDBC-Treiber geladen werden, um eine Verbindung mit der Datenbank und dem DriverManager zu gewährleisten.
Dies kann durch den Java-Ausdruck Class.forName(”Treiber-Name”) erfolgen. Ein Beispiel für das Laden von Treibern einer Oracle-Datenbank wäre:

Class.forName(”oracle.jdbc.driver.OracleDriver”);

Der DriverManger beinhaltet die Operation getConnection(), die die Verbindung kreiert. Es werden der Operation die Adresse der Datenbank und optional, sofern ein Benutzeridentifikation für die Datenbank notwendig ist, der Benutzername und Passwort übergeben.

Connection con = DriverManager.getConnection(DB\_URL, name, passwd);

Ein Statement-Objekt muss generiert werden, um SQL-Ausdrücke absetzen zu können. Dies erledigt die Operation createStatement der Klasse Connection:

Statement sql_stmt = conn.createStatement();

Mit der Operation executeQuery können nun Anfragen und mit executeUpdate() Änderungsoperationen durchgeführt werden. Ein Beispiel für eine Anfrage:

ResultSet rset = sql_stmt.executeQuery(”select Name, Raum from Professoren where Rang=’C4′ “);

Die Operation next() von der Schnittstelle der Klasse ResultSet schaltet auf das nächste, bzw. beim erstmaligen Aufruf auf das erste Ergebnistupel, und liefert einen Bool´schen Wert true falls dieses existiert, sonst false.

Schließlich iteriert man z.B. in einer while-Schleife durch den ResultSet zur Vorbereitung der Ergebnismenge:

while(rset.next()) {
System.out.print(rset.getString(”Name”));
System.out.print(rset.getString(”Raum”));
}

Durch rset.getString(”Name”) wird auf den String-Wert des Attributs Name des derzeit aktuellen Ergebnistupel zugegriffen.
Gegen Ende der Vorbereitung der Ergebnismenge sollte man das Statement und die Datenbankverbindung ordnungsgemäß schließen:

sql_stmt.close();
conn.close();