Discussion:
JDBC Treiber für MS-Access
(zu alt für eine Antwort)
Manfred Dessel
2007-01-13 19:50:32 UTC
Permalink
Hallo zusammen,

ich mal wieder :)
Ich habe vor zu Trainingszwecken über JDBC auf eine MS-Access Datenbank
zuzugreifen, da ich mich in Access sehr gut auskenne und deshalb nicht noch
zusätzliche Schwierigkeiten mit dem DB-Handling zu haben.
Kann mir jemand sagen, wo ich einen kostenlosen JDBC-Treiber für die
MS-Access-Version 2003 herunterladen kann?
Ich habe verschiedene Download-Seiten mit Treibern gefunden, es scheiterte
aber immer daran, daß nach irgenwelchen Zertifizierungs-und JDBC-API
Versionsnummern gefragt wird und ich diese noch nicht beantworten kann.

Würde mich über jede Antwort freuen.

Gruß
Manfred
Holger Samoht
2007-01-13 20:03:06 UTC
Permalink
Post by Manfred Dessel
Ich habe vor zu Trainingszwecken über JDBC auf eine MS-Access Datenbank
zuzugreifen, da ich mich in Access sehr gut auskenne und deshalb nicht
noch zusätzliche Schwierigkeiten mit dem DB-Handling zu haben.
Kann mir jemand sagen, wo ich einen kostenlosen JDBC-Treiber für die
MS-Access-Version 2003 herunterladen kann?
Ich würde generell nie Access nehmen. Aber Du solltest mit dem Jdbc-Odbc
Driver von Java direkt drauf zugreifen können. Mehr guckst Du hier ...

http://www.javaworld.com/javaworld/javaqa/2000-09/03-qa-0922-access.html

Gruß Holger
Manfred Dessel
2007-01-13 20:15:04 UTC
Permalink
Hallo Holger,

erst mal danke für Deine Antwort. Du hast natürlich recht mit Access. Ich
will ja auch weg von Access, aber damit kenn ich nun mal aus.
Ich habe mal kurz in den Link hineigeschaut. Heißt das, das ich keinen
Treiber heraunterladen muß, sondern nur etwa eine Java-Klasse einbinden muß,
die sich dann mit dem ODBC-Treiber unterhält?

Gruß Manfred
Post by Holger Samoht
Post by Manfred Dessel
Ich habe vor zu Trainingszwecken über JDBC auf eine MS-Access Datenbank
zuzugreifen, da ich mich in Access sehr gut auskenne und deshalb nicht
noch zusätzliche Schwierigkeiten mit dem DB-Handling zu haben.
Kann mir jemand sagen, wo ich einen kostenlosen JDBC-Treiber für die
MS-Access-Version 2003 herunterladen kann?
Ich würde generell nie Access nehmen. Aber Du solltest mit dem Jdbc-Odbc
Driver von Java direkt drauf zugreifen können. Mehr guckst Du hier ...
http://www.javaworld.com/javaworld/javaqa/2000-09/03-qa-0922-access.html
Gruß Holger
Stefan Ram
2007-01-13 20:25:16 UTC
Permalink
Ich will ja auch weg von Access, aber damit kenn ich nun mal
aus.
Solange es das macht, was Du brauchst, lasse es Dir
nicht madig machen. Für viele Anwendungen reicht es.

Du benutzt allerdings von Java wohl ohnehin nicht
Access, sondern die Jet-Engine.
Heißt das, das ich keinen Treiber heraunterladen muß, sondern
nur etwa eine Java-Klasse einbinden muß, die sich dann mit dem
ODBC-Treiber unterhält?
Ich mußte nie einen Treiber herkopieren - allerdings
eine ODBC-Datenquelle einrichten. Siehe auch:

http://www.purl.org/stefan_ram/pub/java_msaccess_de
Thomas Darimont
2007-01-13 22:41:59 UTC
Permalink
Hallo,

Stefan Ram wrote:
...
Post by Stefan Ram
Ich mußte nie einen Treiber herkopieren - allerdings
um von Java aus auf eine Access Datenbank zuzugreifen braucht man nicht
notwendiger weise eine ODBC Datenquelle:

/**
*
*/
package de.tutorials;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.Statement;

/**
* @author Tom
*
*/
public class AccessJdbcExample {
/**
* @param args
*/
public static void main(String[] args) throws Exception {
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");

Connection con = DriverManager
.getConnection("jdbc:odbc:DRIVER={Microsoft Access Driver
(*.mdb)};DBQ=C:/Programme/Microsoft Office/Office/Samples/Nordwind.mdb");

Statement stmt = con.createStatement();

ResultSet rs = stmt.executeQuery("SELECT * FROM kunden");
ResultSetMetaData rsmd = rs.getMetaData();
int clmCnt = rsmd.getColumnCount();

while (rs.next()) {
for (int i = 1; i <= clmCnt; i++) {
System.out.print(rs.getString(i));
System.out.print(" ");
}
System.out.println();
}
rs.close();
stmt.close();
con.close();
}
}

Gruß Thomas
Manfred Dessel
2007-01-15 08:54:31 UTC
Permalink
Hallo Thomas,

Das Programm läßt sich zwar übersetzen, aber ich kann es trotzdem nicht
aufrufen. Ich erhalte folgende Fehlermeldung:

Exception in thread "main" java.lang.NoClassDefFoundError:
AccessJdbcExample/class

Kann es sein, das es daran liegt, daß ich die folgende Lib nicht habe?

package de.tutorials;

Gruß Manfred
Post by Thomas Darimont
Hallo,
...
Post by Stefan Ram
Ich mußte nie einen Treiber herkopieren - allerdings
um von Java aus auf eine Access Datenbank zuzugreifen braucht man nicht
/**
*
*/
package de.tutorials;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.Statement;
/**
*
*/
public class AccessJdbcExample {
/**
*/
public static void main(String[] args) throws Exception {
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
Connection con = DriverManager
.getConnection("jdbc:odbc:DRIVER={Microsoft Access Driver
(*.mdb)};DBQ=C:/Programme/Microsoft Office/Office/Samples/Nordwind.mdb");
Statement stmt = con.createStatement();
ResultSet rs = stmt.executeQuery("SELECT * FROM kunden");
ResultSetMetaData rsmd = rs.getMetaData();
int clmCnt = rsmd.getColumnCount();
while (rs.next()) {
for (int i = 1; i <= clmCnt; i++) {
System.out.print(rs.getString(i));
System.out.print(" ");
}
System.out.println();
}
rs.close();
stmt.close();
con.close();
}
}
Gruß Thomas
Michael Rauscher
2007-01-15 09:55:41 UTC
Permalink
Hallo Manfred,
Post by Manfred Dessel
Hallo Thomas,
Das Programm läßt sich zwar übersetzen, aber ich kann es trotzdem nicht
AccessJdbcExample/class
Kann es sein, das es daran liegt, daß ich die folgende Lib nicht habe?
package de.tutorials;
Das ist keine Lib sondern ein Paket. Es wird wirklich Zeit, dass Du Dir
ein Java-Buch reinziehst. Pakete gehören zu den absoluten Grundlagen.

Die package-Anweisung besagt, dass sich die Klasse AccessJdbcExample im
Paket de.tutorials befindet. Anscheinend hast Du dieses Paket aber nicht
erzeugt (Pakete werden i.d.R. auf Verzeichnisse abgebildet - und andersrum).

OK, gehen wir mal davon aus, das Verzeichnis C:\Java wäre die Wurzel
deines Java-Projekts. Dann speicherst Du die Datei
AccessJdbcExample.java in das Verzeichnis "C:\Java\de\tutorials", das -
relativ von C:\Java aus betrachtet - das Paket de.tutorials darstellt.

Anschließend übersetzen

cd C:\Java
javac de\tutorials\AccessJdbcExample.java

und aufrufen:
java de.tutorials.AccessJdbcExample

Wenn Du externe Bibliotheken verwendest, musst Du natürlich den
Classpath anpassen (cp-Schalter).

Gruß
Michael
Manfred Dessel
2007-01-15 11:33:15 UTC
Permalink
Hallo Thomas,

danke für Deine Hilfe. Ich weiß, ich bin noch ein blutiger Anfänger und
müßte mich wahrsscheinlich erst mal um viele andere Dinge kümmern als um den
Datenzugriff, aber so kann ich wenigstens mal mit ein paar Tabellendaten
herumprobieren.
Funktioniert übrigens wunderbar.
Gibt es denn einen Unterschied ob ich direkt mit JDBC oder mit JDBC über
eine ODBC-Schnittstelle auf die Daten zugreife und kann ich mit dieser
Methode
auch auf andere Datenbanken wie z.B. Informix, MySQL oder Oracle zugreifen?

Gruß Manfred
Post by Michael Rauscher
Hallo Manfred,
Post by Manfred Dessel
Hallo Thomas,
Das Programm läßt sich zwar übersetzen, aber ich kann es trotzdem nicht
AccessJdbcExample/class
Kann es sein, das es daran liegt, daß ich die folgende Lib nicht habe?
package de.tutorials;
Das ist keine Lib sondern ein Paket. Es wird wirklich Zeit, dass Du Dir
ein Java-Buch reinziehst. Pakete gehören zu den absoluten Grundlagen.
Die package-Anweisung besagt, dass sich die Klasse AccessJdbcExample im
Paket de.tutorials befindet. Anscheinend hast Du dieses Paket aber nicht
erzeugt (Pakete werden i.d.R. auf Verzeichnisse abgebildet - und andersrum).
OK, gehen wir mal davon aus, das Verzeichnis C:\Java wäre die Wurzel
deines Java-Projekts. Dann speicherst Du die Datei AccessJdbcExample.java
in das Verzeichnis "C:\Java\de\tutorials", das - relativ von C:\Java aus
betrachtet - das Paket de.tutorials darstellt.
Anschließend übersetzen
cd C:\Java
javac de\tutorials\AccessJdbcExample.java
java de.tutorials.AccessJdbcExample
Wenn Du externe Bibliotheken verwendest, musst Du natürlich den Classpath
anpassen (cp-Schalter).
Gruß
Michael
Michael Rauscher
2007-01-15 12:52:28 UTC
Permalink
Hallo Manfred,
Post by Manfred Dessel
Hallo Thomas,
ich heiße zwar nicht Thomas...
Post by Manfred Dessel
Gibt es denn einen Unterschied ob ich direkt mit JDBC oder mit JDBC über
eine ODBC-Schnittstelle auf die Daten zugreife und kann ich mit dieser
Methode
auch auf andere Datenbanken wie z.B. Informix, MySQL oder Oracle zugreifen?
Die Antwort auf beide Fragen: selbstverständlich (zumindest theoretisch).

Die JDBC-ODBC-Bridge ist eigentlich nur für experimentelle Zwecke
gedacht, wie Sun meint:

The JDBC-ODBC Bridge driver is recommended only for experimental use or
when no other alternative is available.

Die Bridge dürfte das Langsamste sein, was Du unter Java für den
DB-Zugriff verwenden kannst.

Abgesehen von einigen wenigen Ausnahmen dürfte es für die meisten
anderen Datenbanken kostenlose JDBC-Treiber geben. Es gibt AFAIK auch
einen JDBC-Treiber für MS-Jet (die DB-Engine, die Access verwendet) -
kostet aber.

Gruß
Michael
Manfred Dessel
2007-01-15 13:14:28 UTC
Permalink
Sorry für die Namensvertauschung,

trotzdem danke für Deine Antwort.

Gruß Manfred
Post by Michael Rauscher
Hallo Manfred,
Post by Manfred Dessel
Hallo Thomas,
ich heiße zwar nicht Thomas...
Post by Manfred Dessel
Gibt es denn einen Unterschied ob ich direkt mit JDBC oder mit JDBC über
eine ODBC-Schnittstelle auf die Daten zugreife und kann ich mit dieser
Methode
auch auf andere Datenbanken wie z.B. Informix, MySQL oder Oracle zugreifen?
Die Antwort auf beide Fragen: selbstverständlich (zumindest theoretisch).
Die JDBC-ODBC-Bridge ist eigentlich nur für experimentelle Zwecke gedacht,
The JDBC-ODBC Bridge driver is recommended only for experimental use or
when no other alternative is available.
Die Bridge dürfte das Langsamste sein, was Du unter Java für den
DB-Zugriff verwenden kannst.
Abgesehen von einigen wenigen Ausnahmen dürfte es für die meisten anderen
Datenbanken kostenlose JDBC-Treiber geben. Es gibt AFAIK auch einen
JDBC-Treiber für MS-Jet (die DB-Engine, die Access verwendet) - kostet
aber.
Gruß
Michael
Manfred Dessel
2007-01-15 08:40:29 UTC
Permalink
Hall Stefan,

kannst Du mir vielleicht noch mal helfen? Ich habe jetzt das Programm aus
dem Link übernommen, die Access-Datei und den ODBC Zugang eingerichtet und
erhalte folgende Fehlermeldung:

Exception in thread "main" java.lang.NoClassDefFoundError: Access/class

Hast Du eine Idee, woran das liegt? Auf die ODBC-Verbindung kann ich
jedenfalls mit einem Fremdprogramm zugreifen (z.B. Power Data-Manager).

Gruß Manfred
Post by Stefan Ram
Ich will ja auch weg von Access, aber damit kenn ich nun mal
aus.
Solange es das macht, was Du brauchst, lasse es Dir
nicht madig machen. Für viele Anwendungen reicht es.
Du benutzt allerdings von Java wohl ohnehin nicht
Access, sondern die Jet-Engine.
Heißt das, das ich keinen Treiber heraunterladen muß, sondern
nur etwa eine Java-Klasse einbinden muß, die sich dann mit dem
ODBC-Treiber unterhält?
Ich mußte nie einen Treiber herkopieren - allerdings
http://www.purl.org/stefan_ram/pub/java_msaccess_de
Michael Rauscher
2007-01-15 08:46:57 UTC
Permalink
Post by Manfred Dessel
Hall Stefan,
kannst Du mir vielleicht noch mal helfen? Ich habe jetzt das Programm aus
dem Link übernommen, die Access-Datei und den ODBC Zugang eingerichtet und
Exception in thread "main" java.lang.NoClassDefFoundError: Access/class
Java-Klassen ruft man ohne ".class" auf, also z. B. "java Access" und
nicht "java Access.class"...

Gruß
Michael
Manfred Dessel
2007-01-15 08:56:41 UTC
Permalink
Hallo Michael,
sorry war ein Tipfehler, der Fehler ist trotzdem da.

Gruß Manfred
Post by Michael Rauscher
Post by Manfred Dessel
Hall Stefan,
kannst Du mir vielleicht noch mal helfen? Ich habe jetzt das Programm aus
dem Link übernommen, die Access-Datei und den ODBC Zugang eingerichtet
Exception in thread "main" java.lang.NoClassDefFoundError: Access/class
Java-Klassen ruft man ohne ".class" auf, also z. B. "java Access" und
nicht "java Access.class"...
Gruß
Michael
Holger Samoht
2007-01-13 20:33:58 UTC
Permalink
Post by Manfred Dessel
erst mal danke für Deine Antwort. Du hast natürlich recht mit Access. Ich
will ja auch weg von Access, aber damit kenn ich nun mal aus.
Ich habe mal kurz in den Link hineigeschaut. Heißt das, das ich keinen
Treiber heraunterladen muß, sondern nur etwa eine Java-Klasse einbinden
muß, die sich dann mit dem ODBC-Treiber unterhält?
Ist eigentlich alles schon von Haus aus mit dabei. Du kannst sogar auf Excel
Sheet per Odbc drauf zugreifen.

http://java.sun.com/j2se/1.3/docs/guide/jdbc/getstart/bridge.doc.html

http://www.torsten-horn.de/techdocs/java-sql.htm

Alternative zu Access könnte HSQLDB sein. Finde ich ganz gut. Schaue es Dir
einfach mal an. Sehr einfach.

Gruß Holger
Manfred Dessel
2007-01-13 20:47:48 UTC
Permalink
Danke euch allen, werde es direkt mal ausprobieren

Gruß
Manfred
Post by Manfred Dessel
Hallo Holger,
erst mal danke für Deine Antwort. Du hast natürlich recht mit Access. Ich
will ja auch weg von Access, aber damit kenn ich nun mal aus.
Ich habe mal kurz in den Link hineigeschaut. Heißt das, das ich keinen
Treiber heraunterladen muß, sondern nur etwa eine Java-Klasse einbinden
muß, die sich dann mit dem ODBC-Treiber unterhält?
Gruß Manfred
Post by Holger Samoht
Post by Manfred Dessel
Ich habe vor zu Trainingszwecken über JDBC auf eine MS-Access Datenbank
zuzugreifen, da ich mich in Access sehr gut auskenne und deshalb nicht
noch zusätzliche Schwierigkeiten mit dem DB-Handling zu haben.
Kann mir jemand sagen, wo ich einen kostenlosen JDBC-Treiber für die
MS-Access-Version 2003 herunterladen kann?
Ich würde generell nie Access nehmen. Aber Du solltest mit dem Jdbc-Odbc
Driver von Java direkt drauf zugreifen können. Mehr guckst Du hier ...
http://www.javaworld.com/javaworld/javaqa/2000-09/03-qa-0922-access.html
Gruß Holger
Loading...