JDBC-Datenbanken mit Microsoft Access
Direktes Lesen einer .mdb-Datei ohne Einrichtung einer Datenquelle im ODBC-Manager
/*
* JDBC-Datenbanken mit Microsoft Access
* LESEN einer Datei direkt aus *.mdb
* Ohne Einrichtung der Datenquelle im ODBC-Manager
*/
import java.sql.*;
// KLASSE HAUPTPROGRAMM
public class Access_sin_odbc
{
// MAIN-Methode als Einstiegspunkt des PROGRAMMS
public static void main(String[] args)
{
try
{
System.out.println("\nJDBC Access");
System.out.println("===========");
// Connection String mit dem physischen Pfad zur Datenbank
String db = "D:\\Ordner\\Unterordner\\AccessBD_1.mdb";
// Falls sich die DB im Ordner der Java-Anwendung befindet:
// String db = "AccessBD_1.mdb";
String url = "jdbc:odbc:MS Access-Datenbank;DBQ=" + db;
// JDBC-Treiber registrieren mit Class.forName (Classloader)
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
System.out.println("\nEstableciendo conexión...");
Connection con = DriverManager.getConnection(url, "", "");
System.out.println("\nConexión establecida: \"" + db + "\".");
System.out.println("");
// Ausführen einer SQL-SELECT-Anweisung
Statement select = con.createStatement();
ResultSet nombres = select.executeQuery("SELECT TOP 8 * FROM Tabla1 ORDER BY id");
System.out.println("Lesen der ersten 8 Datensätze:");
System.out.println("");
System.out.println("\tNombre");
System.out.println("");
int col = nombres.findColumn("Nombre");
boolean siguiente = nombres.next();
while (siguiente)
{
System.out.println("\t" + nombres.getString(col));
siguiente = nombres.next();
}
System.out.println("");
// Freigabe der Ressourcen
nombres.close();
select.close();
// Informationen über den Manager der DB und die DB abrufen
/* Das Interface ResultSet stellt eine Datenmenge aus einer SQL-Abfrage dar.
* Um auf Datensätze zuzugreifen, positioniert sich ein Cursor zunächst
* vor dem ersten Datensatz. Um durch die Datensätze zu navigieren,
* wird die Methode resultSet.next() verwendet. */
DatabaseMetaData dm = null;
ResultSet rs = null;
dm = con.getMetaData();
rs = dm.getCatalogs();
System.out.println("Informationen über den Treiber:\n");
System.out.println("\tDriver-Name: " + dm.getDriverName());
System.out.println("\tDriver-Version: " + dm.getDriverVersion());
System.out.println("\nInformationen zum DB-Server:\n");
System.out.println("\tDatenbankname: " + dm.getDatabaseProductName());
System.out.println("\tDatenbankversion: " + dm.getDatabaseProductVersion());
System.out.println("\nDaten in diesem Ordner:\n");
// Um den gesamten Katalog der DB anzuzeigen
int n = 1;
while (rs.next())
{
// ResultSet.getString() gibt den Pfad zur DB im Katalog zurück
System.out.println("\t" + n + "-" + rs.getString(1));
n += 1;
}
// Freigabe der Ressourcen
rs.close();
con.close();
System.out.println("\nVerbindung mit: \"" + db + "\" geschlossen.\n\n");
}
catch (Exception huhn)
{
// System.out.println("\nFehler bei der Verbindung mit der DB: " + huhn.getMessage() + "\n");
System.out.println("\nFehler beim Ausführen einer Aktion des Programms.\n\n");
}
}
}
Hinweise
- Die Verbindung erfolgt über die JDBC-ODBC-Brücke (
sun.jdbc.odbc.JdbcOdbcDriver), die ab Java 8 entfernt wurde. Für neuere Java-Versionen wird der UCanAccess-Treiber empfohlen. - Der Pfad zur Datenbank muss mit doppelten Backslashes angegeben werden (
D:\\Ordner\\...). - Die Tabelle und das Feld im SQL-Statement (
Tabelle1, Name) müssen an die eigene Datenbank angepasst werden.