Datenbankverbindung (Java)

Aus Byte-Welt Wiki
Wechseln zu: Navigation, Suche

Da man in Programmen oft eine größere Menge an Daten verarbeiten und speichern will, nimmt man dafür oftmals eine Datenbank um diese gut sortiert zu speichern. Um eine Datenbank mit Java zu verwenden, muss man immer nach dem gleichen Schema vorgehen:

  1. Treiber laden
  2. Verbindung aufbauen
  3. Querys ausführen
  4. Verbindung schließen


Damit es am Ende keine Fehlermeldung vom Compiler beim Kompilieren und später vom Interpreter beim Ausführen gibt, ist es erforderlich, dass die entsprechenden Klassen im Programm importiert bzw. in den Classpath gesetzt werden.

Treiber laden

Die Treiber für die Datenbanken werden meistens direkt mit den Datenbanken mitgeliefert, da die Hersteller dies direkt als Support anbieten. Einen Unterschied machen die ODBC Datenbanken die man in Windows direkt integrieren kann, diese können mit den JDBC/ODBC Treiber von Java direkt verwendet werden, eine ODBC Datenbank ist z.B. eine Access Datenbank.

Access Datenbank

ODBC-Datenquellen-Administrator
Um die Verbindung zu einer Access Datenbank herzustellen, muss man diese erst mal in Windows eingebunden haben, dies geschieht über die Systemsteuerung -> Verwaltung -> Datenquellen (ODBC) hier muss die Datenbank jetzt eingerichtet werden.

Um diese jetzt in Java zu verwenden, muss wie anfangs schon erwähnt der Treiber geladen und die Verbindung aufgebaut werden.

//laden der Treiberklasse
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
//zurückgeben der neuen Verbindung
Connection con = DriverManager.getConnection("jdbc:odbc:Datenbankname","Benutzer","Passwort");

In dem Fall, in welchem die Access-Datenbankdatei nicht mit einem Passwort geschützt wurde, sind die Werte für Benutzer und Passwort Leerstrings (""). Wenn die Datenbankdatei mit einem Passwort geschützt wurde, ist der Benutzername gleich dem Passwort.


Variante ohne Registrierung der ODBC Datenquellen

Es gibt allerdings auch eine Variante, bei der o.g. Registrierung der ODBC Datenquellen entfallen kann. Eine reale Methode zur Herstellung einer Verbindung kann so aussehen:

private static Connection con;
[...]
 
public boolean connect(String filename, String user, String passwd)
   throws SQLException, ClassNotFoundException {
 
   String url = "jdbc:odbc:Driver={Microsoft Access Driver (*.mdb)};DBQ="
      + filename + ";READONLY=false}";      
 
   Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
   con = DriverManager.getConnection(url, user, passwd);
 
   return true;
}

MySQL Datenbank

Um die Verbindung zu einer MySQL Datenbank herzustellen, muss diese auf einem erreichbaren Rechner laufen und sollte dieser Rechner nicht der gleiche sein wo auch das Programm ausgeführt wird, muss der Benutzer auch die Rechte haben von außerhalb auf die Datenbank zu zugreifen. Um diese jetzt in Java zu verwenden, muss wie anfangs schon erwähnt, der Treiber geladen und die Verbindung aufgebaut werden.

//laden der Treiberklasse
Class.forName("com.mysql.jdbc.Driver");
//zurückgeben der neuen Verbindung
Connection con = DriverManager.getConnection("jdbc:mysql://Host:Port/Datenbank","Benutzer","Passwort");

Die Portangabe muss man nicht machen solange der Server auf dem Standard MySQL Port 3306 läuft. Bei der Angabe der Datenbank wird automatisch diese Datenbank für den Gebrauch ausgewählt, so dass man diese nicht extra auswählen muss.

HSQLDB Datenbank

Um die Verbindung mit einer HSQLDB Datenbank aufzubauen, hat man mehrere Möglichkeiten da die Datenbank in verschiedenen Modi laufen kann, hier wird nur auf die Standalone Variante eingegangen. Wenn man diese Datenbank verwenden will, muss man nichts im System einrichten oder installieren. Es wird nur vorausgesetzt, dass die hsqldb.jar im Classpath ist.

// laden des Datenbanktreibers
Class.forName("org.hsqldb.jdbcDriver");
// Aufbauen der Verbindung zu der Datenbank
Connection con = DriverManager.getConnection("jdbc:hsqldb:file:PfadzurDatenbank","Benutzer","Passwort");

Der Pfad kann relativ oder auch absolut angegeben werden, außerdem können danach verschiedene Optionen folgen. Dabei kann unter Windows-Systemen ein Backslash (\) im Pfad zur Datenbank-Datei zu Problemen führen. Besser gleich einen Slash (/)zur Verzeichnistrennung setzen. Der Benutzer ist standardmäßig "sa" und ein Passwort ist nicht vergeben.

Firebird Datenbank

Um die Verbindung zu einer Firebird Datenbank herzustellen muss der Server auf einem erreichbaren Rechner installiert sein. Damit man diese jetzt in Java zu verwenden kann, muss wie anfangs schon erwähnt, der Treiber geladen und die Verbindung aufgebaut werden.

//laden der Treiberklasse
Class.forName("org.firebirdsql.jdbc.FBDriver");
//zurückgeben der neuen Verbindung
Connection con = DriverManager.getConnection("jdbc:firebirdsql:HOST/PORT:PfadzuDatenbank","Benutzer","Passwort");

Der Pfad zu der Datenbank muss immer Absolut angegeben werden, damit die Datenbank gefunden wird.

H2 Database

Für die noch recht junge, aber sehr schnelle, in Java programmierte Datenbank H2, sieht der Code zum Aufbau der Verbindung zur Datenbank so aus:

Class.forName("org.h2.Driver");
Connection conn = DriverManager.getConnection("jdbc:h2:PfadzurDatenbank", "Benutzer", "Passwort");

PostgreSQL

Um die Verbindung zu einer Postgres Datenbank herzustellen, muss diese auf einem erreichbaren Rechner laufen und sollte dieser Rechner nicht der gleiche sein wo auch das Programm ausgeführt wird, muss der Benutzer auch die Rechte haben von außerhalb auf die Datenbank zu zugreifen. Damit man diese jetzt in Java zu verwenden kann, muss wie anfangs schon erwähnt, der Treiber geladen und die Verbindung aufgebaut werden.

//laden der Treiberklasse
Class.forName("org.postgresql.Driver");
//zurückgeben der neuen Verbindung
Connection con = DriverManager.getConnection("jdbc:postgresql://HOST:PORT/Datenbank","Benutzer","Passwort");

Optional lassen sich beim Verbindungsaufbau noch weitere Parameter angeben wie z.B. ob SSL verwendet werden soll.

Oracle

Um die Verbindung mit einer Oracle Datenbank herzustellen, muss diese auf einem erreichbaren Rechner laufen.

//laden der Treiberklasse
Class.forName("oracle.jdbc.driver.OracleDriver");
//zurückgeben der neuen Verbindung
Connection con = DriverManager.getConnection("jdbc:oracle:thin:@<host>:<port>:<DB>","Benutzer","Passwort");

DB2

Um die Verbindung mit einer IBM DB2 Datenbank herzustellen, muss diese auf einem erreichbaren Rechner laufen.

//laden eines Typ2-Treibers
Class.forName("COM.ibm.db2.jdbc.app.DB2Driver").newInstance();
 
//oder des Universaltreibers
Class.forName("com.ibm.db2.jcc.DB2Driver");
 
//zurückgeben der neuen Verbindung
Connection con = DriverManager.getConnection("jdbc:db2:Datenbank","Benutzer","Passwort");

MS SQL Server

Um die Verbindung mit einer MS SQL Datenbank herzustellen, muss diese auf einem erreichbaren Rechner laufen. Man kann für alle Systeme den Unix Treiber verwenden den Microsoft anbietet.

//laden der Treiberklasse
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
//zurückgeben der neuen Verbindung
Connection con = DriverManager.getConnection("jdbc:sqlserver://<server>\\<instanz>;databaseName=<datenbank>","Benutzer","Passwort");

Wird der jTDS-Treiber verwendet, muss der Connection-String anders aussehen:

//laden der Treiberklasse
Class.forName("net.sourceforge.jtds.jdbc.Driver");
//zurückgeben der neuen Verbindung
Connection con = DriverManager.getConnection("jdbc:jtds:sqlserver://<server>\\<instanz>;databaseName=<datenbank>","Benutzer","Passwort");

JavaDB/Derby

private void setDBSystemDir() {
   // Hier wird das Systemverzeichnis für die Datenbank angegeben: /.addressbook/
   String userHomeDir = System.getProperty("user.home", ".");
   String systemDir = userHomeDir + "/.addressbook";
   // Festlegen des Systemverzeichnisses für die Datenbank
   System.setProperty("derby.system.home", systemDir);
}
...

Der Connection-String sieht dann so aus:

Connection dbConnection = null;
String strUrl = "jdbc:derby:DefaultAddressBook;user=dbuser;password=dbuserpwd";
try {
   dbConnection = DriverManager.getConnection(strUrl);
} 
catch (SQLException sqle) {
   sqle.printStackTrace();
}

Andere Datenbanken

Bei anderen Datenbanken läuft es genauso ab, nur muss man sich dann die Treibernamen aus den Handbüchern suchen, sowie die Art wie der Pfad für die Datenbank angegeben werden soll.


Mit der zurückgegebenen Connection kann man dann die Arbeiten mit der Datenbank beginnen.


Weblinks