JDBC
aus www.iwiki.de, der freien Wissensdatenbank
Java Database Connectivity (JDBC) ist ein Teil der Java-API und stellt Java-Anwendungen ein Framework für den Zugriff auf Daten in Tabellenform zur Verfügung. Die JDBC-API wird hauptsächlich für den Zugriff auf Datenbanksysteme verwendet, ist aber grundsätzlich nicht auf Datenbanken beschränkt.
Die JDBC-API bildet eine abstrakte Schicht zwischen Anwendung und verwendeter Datenquelle und stellt dem Entwickler eine einheitliche und von der Datenquelle unabhängige Schnittstelle zur Verfügung.
Inhaltsverzeichnis |
Architektur
Die zentralen Elemente der JDBC-API sind der JDBC-Treibermanager und die JDBC-Treiber. Um die Verbindung zu einer Datenquelle aufzubauen, übergibt die Anwendung eine JDBC-URL, den sogenannten Connection-String, an den Treibermanager. Anhand dieser URL entscheidet der Treibermanager, welcher der geladenen JDBC-Treiber für den Zugriff verwendet werden muss und öffnet eine Verbindung, die dann durch die Anwendung verwendet werden kann.
Dadurch, dass es sich bei der JDBC-URL um eine Zeichenkette handelt, die sogar vom Benutzer der Anwendung eingegeben werden könnte, bleibt der Zugriff flexibel und die Anwendung kann jede Datenquelle nutzen, selbst wenn der JDBC-Treiber für diese Datenquelle lange nach Erstellung der Anwendung erzeugt wurde. Der weitere Zugriff erfolgt dann über die Connection, ResultSet und verwandten Objekte der JDBC-API, die alle auf der durch die Treiber implementierten Schnittstellen aufsetzen.
JDBC-Treiber
Damit die JDBC-API diese einheitliche Schnittstelle zur Verfügung stellen kann, wird ein JDBC-Treiber benötigt. Der JDBC-Treiber ist jeweils auf eine Datenquelle zugeschnitten und muss die JDBC-Spezifikation implementieren. Ob es sich um eine Datenbank oder eine andere Datenquelle handelt ist nebensächlich, die Daten müssen lediglich in Tabellenform abgefragt werden können. Der Treiber fungiert als Umsetzer zwischen der JDBC-API und den nativen Abfrage- und Zugriffsmöglichkeiten der darunter liegenden Datenquelle. Auf diese Weise ist es möglich, eine Anwendung komplett unabhängig von der verwendeten Datenquelle zu halten.
Falls kein JDBC-Treiber zur Verfügung steht, können mit Hilfe von Brückentreibern wie beispielsweise der ODBC-Bridge auch Treiber anderer Datenbankschnittstellen (hier ODBC) verwendet werden. Da es sich dabei um eine Ausweichlösung handelt und die verschiedenen Datenbankschnittstellen nicht immer die gleichen Möglichkeiten bieten, kann der Funktionsumfang im Vergleich zu einem echten JDBC-Treiber geringer ausfallen.
JDBC-URL
Um ohne Programmänderungen auf jede per JDBC-Treiber verwendbare Quelle zugreifen zu können, wurde ein einheitliches Adressierungs-Schema gewählt, dass einer strikten Syntax folgt und dennoch Raum für treiberspezifische Merkmale bietet.
Eine JDBC-URL ist wie folgt aufgebaut:
<JDBC-URL> ::= jdbc:<treibername>:<treiberoptionen>
<treibername> ::= Name des Treibers, der verwendet werden soll (Kürzel)
<treiberoptionen> ::= Treiberspezifische Einstellungen zur Datenquelle
Beim Registrieren der JDBC-Treiber mit dem JDBC-Treibermanager teilen die Treiber dem Manager mit, auf welche Namen sie reagieren. Erhält der Treibermanager später eine Verbindungsanforderung, so kann er anhand des in der URL enthaltenen Namens bestimmen welcher Treiber für den Zugriff verwendet werden soll. Dann übergibt der Manager die unveränderten treiberoptionen (beispielsweise einen Dateinamen oder einen Servernamen) an den Treiber, damit dieser sie interpretieren und zum Aufbau einer Verbindung verwenden kann. Die möglichen Werte für die Treiberoptionen hängen nur vom verwendeten Treiber ab und variieren von Treiber zu Treiber stark.
Beispiele für JDBC-URLs
// Zugriff auf lokale Cloudscape/Derby DB - Wird angelegt falls nicht vorhanden
jdbc:derby:c:/data/mydb;create=true
// Zugriff auf entfernte Cloudscape/Derby DB
jdbc:derby:net://dbhost:1527/mydb
// Zugriff auf eine ODBC Datenquelle über die ODBC-Bridge
jdbc:odbc:mydb;UID=myuser;PWD=mypassword
// Zugriff auf DB2 Datenbank
jdbc:db2:mydb
Anwendungsbeispiel
Das Beispiel öffnet eine zuvor unter Windows in der ODBC-Datenquellenverwaltung angelegte CSV-Datenquelle, liest die enthaltenen Daten aus und gibt diese auf der Konsole aus.
package de.fhwue.dbim;
import java.sql.*;
/**
* Beispiel-Quelltext für den Zugriff auf eine
* ODBC-Datenquelle. Auf Fehlerbehandlung wurde
* der Übersichtlichkeit halber verzichtet.
* @author tkolwe
*/
public class DBIMTest {
public static void main(String[] args) {
try
{
// Laden des JDBC-ODBC Brückentreibers
Class.forName ("sun.jdbc.odbc.JdbcOdbcDriver");
// Öffnen der Verbindung mit Hilfe des Treibermanagers
Connection con = DriverManager.getConnection("jdbc:odbc:MyODBCSource");
// Erzeugen und Ausführen der SQL-Abfrage
Statement stmt = con.createStatement();
ResultSet rs = stmt.executeQuery("SELECT * FROM mydb.csv");
// Ausgabe der Ergebnisse in die Konsole
System.out.println("ID\tName");
while (rs.next()){
String id = rs.getString("id");
String name = rs.getString("name");
System.out.println(id + "\t" + name);
}
}
catch (Exception e)
{
System.out.println(e);
}
}
}
| Konsolenausgabe | mydb.csv | schema.ini | |
|---|---|---|---|
|
|
|
Andere Datenbankschnittstellen
