JDBC



Java verwendet das JDBC-Konzept, um auf relationale Datenbanken zuzugreifen. In JDBC benötigt man einen sogenannten JDBC-Treiber, um den Zugriff tatsächlich auszuführen. Solche Treiber gibt es in unterschiedlichen Typen. Am meisten verwendet wird Typ 4, dieser hat die einfachste Struktur und erfordert keinerlei clientseitige Datenbankinstallation.

Typ 4: Der Treiber besteht einfach aus einer Java-Klasse, die zur Anwendung zugefügt wird und die direkt (zum Beispiel über TCP/IP) auf den Datenbankserver zugreift.

Von praktischer Bedeutung ist die JDBC-ODBC-Bridge von Sun (sun.jdbc.odbc.JdbcOdbcDriver); das ist ein Treiber, der über das JNI (Java Native Interface) aus eine lokale ODBC-Quelle zugreift. ODBC ist der (inzwischen veraltete) ehemalige Zurgiffstandard auf Datenbanken von Microsoft. Inzwischen sind sowohl ODBC als auch diese Bridge multithreadingfähig; das ist eine wichtige Voraussetzung für performante Multi-User-Systeme.Leider ist die Bridge nur eine Art Beispielprogramm und kein Produkt, und man muss eben auch die erforderliche ODBC-Quelle lokal einrichten (das geschieht im ODBC-Manager in der Systemsteuerung von Windows, Start/Einstellungen/Systemsteuerung/Verwaltung/ODBC-Datenquellen).

Die Beispiele in dieser Vorlesung beziehen sich auf Borland JDataStore, das aber leider nicht zur JBuilder Private Lizenz gehört (nur zu Professional und Enterprise).

Für den JDataStore muss man darauf achten, dass Tabellennamen nur 8 Zeichen haben dürfen.

Man geht folgendermaßen vor: 

Eine Datenbank wird mit dem JDataStore Explorer angelegt; diesen erreicht man in JBuilder über die Menüpunkte Tools/JDataStore Explorer:

Im Explorer legt man mit Neu die Datenbank an und richtet ebenfalls mit dem Explorer eine Beispiel-Tabelle ein:

Schließich kann man von Java aus auf die Datenbank zugreifen: 

package tutorial028jdbcdatastore;
import java.sql.*;

/**
 * Title:
 * Description:
 * Copyright:    Copyright (c) 2002
 * Company:
 * @author
 * @version 1.0
 */

public class Main {

  public Main() {
  }
  public static void main(String[] args) {
    Main main1 = new Main();
    try  {main1.go();}
      catch (Exception e) {System.out.println(e);}
  }

  public void go()throws Exception {
    Class.forName("com.borland.datastore.jdbc.DataStoreDriver");
       // Laden der Treiberklasse
    Connection con = DriverManager.getConnection(
     "jdbc:borland:dslocal:/e:/work/java/tutorials/tutorial028jdbcdatastore/sample.jds",
        "JDataStore","");
       // User, Password
       // Connection holen, aus allen geladenen oder bei der
       // System-Property jdbc.drivers eingetragenen Treiber

       // ODBC:    sun.jdbc.odbc.JdbcOdbcDriver
       // ODBC:    jdbc:odbc:odbcDataSource

       // Achtung! Table-Name maximal 8 Zeichen! 
       Statement statement = con.createStatement();
       statement.executeUpdate(
           "insert into student (name, vorname) values('Mueller', 'Fritz')");
       ResultSet res = statement.executeQuery(
            "select * from student");
       while(res.next()){
          System.out.print(res.getObject(1));
          System.out.println(res.getObject("Vorname"));
       }
       // cleanup
       statement.close();
       con.close();
  }
}

Wenn alles gut geht, sollte man eine Ausgabe von Namen sehen!

Wichtig bei JDBC ist, dass man die erzeugten Objekte (Connections, Statements, ResultSets) ordentlich schließt, da sonst leicht Speicherlecks entstehen.