Connect zu ACCESS-DB mit Ucanaccess

GuenniMo

Mitglied
Hallo,

ich administriere ein geografisches Informationssystem, für das u.a. eine eigene Skriptsprache auf der Basis von Java entwickelt wurde. Ein Bestandteil dieses Systems ist JRE7 (derzeit kein Update auf 8 möglich). Aus diesem System heraus muss ich eine ACCESS-Datenbank "befüllen" und wollte mich hierzu "Ucanaccess" bedienen. Dafür habe ich mir die neueste Version 5.0.1 heruntergeladen, die fünf jar-Dateien in den Classpath gesteckt und das Ganze getestet, musste jedoch feststellen, dass diese wohl JRE8 erfordert.

Folgende Fehlermeldung wird dabei ausgeworfen (Auszug aus dem Log):
*EXEC*sqlconnect
[1]=net.ucanaccess.jdbc.UcanaccessDriver
[2]=DriverManager.getConnection("jdbc:ucanaccess://C:/temp/Wincan.mdb")
[3]=X
[4]=X
Exception in thread "AWT-EventQueue-0" java.lang.UnsupportedClassVersionError: net/ucanaccess/jdbc/UcanaccessDriver : Unsupported major.minor version 52.0
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(Unknown Source)
at java.security.SecureClassLoader.defineClass(Unknown Source)
at java.net.URLClassLoader.defineClass(Unknown Source)
at java.net.URLClassLoader.access$100(Unknown Source)

.
.
.


Also habe ich die Version 4.0.4 herunter geladen und das Ganze erneut getestet in der Hoffnung, dass diese Version mit JRE7 klarkommt.

hierbei wird jedoch keine Datenbankverbindung erstellt, weil angeblich kein Treiber gefunden wird.

Error while connecting: sqlconnect:connect:No suitable driver found for DriverManager.getConnection("jdbc:ucanaccess://C:/temp/Wincan.mdb")
Error while closing connection: Fehlerhaftes Argument: DB-Verbindung ist null.

Hier die Java-Version (an der ich nicht vorbeikomme):
1651495484642.png


Mein Betriebssystem:

1651495574412.png

Nun meine Frage:

Welche Version von "Ucanaccess" muss ich verwenden, damit das Ganze mit der o.g. JRE7 funktioniert?

Gibt es ggf. Alternativen (Bitte OHNE ODBC)?

Vielen Dank im Voraus für Eure Mühe
 
Das Problem hast Du vermutlich richtig erkannt: Die verwendete Version hat alles in Java 8 übersetzt (Version 52). Daher musst Du ältere Versionen ausprobieren in der Hoffnung, dass es z.B. mit der 3er Version funktioniert.
 
Das 4er Release sollte laut Webseite reichen, weil bei 5.0.0 steht "Requires now Java 8".

Eigentlich sollte man folgendes nicht brauchen:
Code:
Class.forName("net.ucanaccess.jdbc.UcanaccessDriver");
Aber probieren würde ich es trotzdem mal, ob das vor dem Jdbc-Connect funktioniert.
 
Das Problem hast Du vermutlich richtig erkannt: Die verwendete Version hat alles in Java 8 übersetzt (Version 52). Daher musst Du ältere Versionen ausprobieren in der Hoffnung, dass es z.B. mit der 3er Version funktioniert.
Für die Version 3.0.7 war die JRE7 warscheinlich zu neu. Da gab es auch einen Versionskonflikt, aber scheinbar in die andere Richtung.

*EXEC*sqlconnect
[1]=net.ucanaccess.jdbc.UcanaccessDriver
[2]=DriverManager.getConnection("jdbc:ucanaccess://C:/temp/Wincan.mdb")
[3]=X
[4]=X
Exception in thread "AWT-EventQueue-0" java.lang.UnsupportedClassVersionError: net/ucanaccess/jdbc/UcanaccessDriver : Unsupported major.minor version 52.0
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(Unknown Source)
at java.security.SecureClassLoader.defineClass(Unknown Source)
at java.net.URLClassLoader.defineClass(Unknown Source)
at java.net.URLClassLoader.access$100(Unknown Source)
 
Prüfe bitte einmal den Classpath! Bist Du sicher, dass Du nicht die 5er Version im Classpath hast? Die Meldung besagt, dass die Klasse net.ucanaccess.jdbc.UcanaccessDriver in der Version 52.0 (= Java 8) vorliegt und daher nicht geladen werden kann. Java 7 wäre die Version 51.

Daher würde ich raten, das einmal zu prüfen. Nach dem, was @LimDul gefunden hat, wäre meine Erwartungshaltung, dass es mit der 4er Version klappen müsste.
 
Das 4er Release sollte laut Webseite reichen, weil bei 5.0.0 steht "Requires now Java 8".

Eigentlich sollte man folgendes nicht brauchen:
Code:
Class.forName("net.ucanaccess.jdbc.UcanaccessDriver");
Aber probieren würde ich es trotzdem mal, ob das vor dem Jdbc-Connect funktioniert.
Das hatte ich auch gelesen, deswegen hatte ich mir ja die 4.0.4 herunter geladen. Die Tatsache, dass er da keine Verbindung zustande brachte lag daran, dass ich die 5 jar-Dateien der Version 4.0.4 aus Versehen im falschen Ordner abgelegt hatte. Das hatte ich eben korrigiert und das Ganze nochmal getestet.

Auch hier lag dann der gleiche Versionskonflikt vor wie bei 3.0.7.

*EXEC*sqlconnect
[1]=net.ucanaccess.jdbc.UcanaccessDriver
[2]=DriverManager.getConnection("jdbc:ucanaccess://C:/temp/Wincan.mdb")
[3]=X
[4]=X
Exception in thread "AWT-EventQueue-0" java.lang.UnsupportedClassVersionError: net/ucanaccess/jdbc/UcanaccessDriver : Unsupported major.minor version 52.0
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(Unknown Source)
at java.security.SecureClassLoader.defineClass(Unknown Source)
at java.net.URLClassLoader.defineClass(Unknown Source)
at java.net.URLClassLoader.access$100(Unknown Source)


Version 5.0.1 ist zu neu und die beiden anderen scheinbar zu alt.
 
Prüfe bitte einmal den Classpath! Bist Du sicher, dass Du nicht die 5er Version im Classpath hast? Die Meldung besagt, dass die Klasse net.ucanaccess.jdbc.UcanaccessDriver in der Version 52.0 (= Java 8) vorliegt und daher nicht geladen werden kann. Java 7 wäre die Version 51.

Daher würde ich raten, das einmal zu prüfen. Nach dem, was @LimDul gefunden hat, wäre meine Erwartungshaltung, dass es mit der 4er Version klappen müsste.
OK. Ich prüfe nochmal alles genau.

Vielen Dank euch beiden schon mal
 
Ich hatte tatsächlich noch jar-Dateien der 5er-Version im Classpath. Nachdem ich nun alles bereinigt hatte, habe ich beginnend mit Version 3.0.7 alles nochmals getestet.

3.0.7:
Error while connecting: sqlconnect:connect:No suitable driver found for DriverManager.getConnection("jdbc:ucanaccess://C:/temp/Wincan.mdb")
Error while closing connection: Fehlerhaftes Argument: DB-Verbindung ist null.


4.04:
Error while connecting: sqlconnect:connect:No suitable driver found for DriverManager.getConnection("jdbc:ucanaccess://C:/temp/Wincan.mdb")
Error while closing connection: Fehlerhaftes Argument: DB-Verbindung ist null.


5.0.1
*EXEC*sqlconnect
[1]=net.ucanaccess.jdbc.UcanaccessDriver
[2]=DriverManager.getConnection("jdbc:ucanaccess://C:/temp/Wincan.mdb")
[3]=X
[4]=X
Exception in thread "AWT-EventQueue-0" java.lang.UnsupportedClassVersionError: net/ucanaccess/jdbc/UcanaccessDriver : Unsupported major.minor version 52.0


Ich bin da jetzt mit meinem Latein erst mal am Ende.
 
Hab das gerade mal getestet: funktioniert einwandfrei.

Code:
wget https://netcologne.dl.sourceforge.net/project/ucanaccess/archive/v4_archive/UCanAccess-4.0.4-bin.zip
mkdir mdb
cd mdb
tar -xzf ../jdk-7u45-linux-i586.tar.gz
unzip ../UCanAccess-4.0.4-bin.zip

Damit habe ich die beiden Verzeichnisse
Code:
jdk1.7.0_45
UCanAccess-4.0.4-bin

Jetzt noch Test.java erstellen:
Java:
import java.sql.*;

public class Test {
    public static void main(String[] args) throws Exception {
        Connection conn = DriverManager.getConnection("jdbc:ucanaccess://" + args[0]);
        conn.close();
    }
}

Übersetzen
Code:
jdk1.7.0_45/bin/javac Test.java

Und mit
Code:
jdk1.7.0_45/bin/java -cp UCanAccess-4.0.4-bin/lib/commons-lang-2.6.jar:UCanAccess-4.0.4-bin/lib/commons-logging-1.1.3.jar:UCanAccess-4.0.4-bin/lib/hsqldb.jar:UCanAccess-4.0.4-bin/lib/jackcess-2.1.11.jar:UCanAccess-4.0.4-bin/ucanaccess-4.0.4.jar:. Test ./example.mdb
ausführen. Die Verbindung wird dann ohne Mucken aufgebaut und geschlossen (die ./example.mdb muss natürlich existieren 🙂)
 
Der Fehler ist gefunden. Das geografisches Informationssystem, mit dem ich da zugange bin, hatte ein Problem mit dem Doppelpunkt ("jdbc:ucanaccess://C://...."). Ich habe mir den Connection-String dann zusammengebaut (Sonderzeichen über ASCII-Code) und das hat dann funktioniert. Die Ucanaccess-Version 4.0.4 ist die richtige.
Vielen, vielen Dank nochmal an alle, die sich meinem Problem angenommen haben
 

Neue Themen


Zurück
Oben