4 Stimmen

Wie funktioniert der JDBC-Treiber in Java 5 und 6?

Java 6 wird mit JDBC 4 ausgeliefert, das nicht abwärtskompatibel zu JDBC ist, das mit früheren Versionen von Java ausgeliefert wurde.

Wir haben einen JDBC-Treiber, der sowohl Java 5 als auch Java 6 unterstützen muss. Wenn ich die neuen Schnittstellen im Treiber implementiere, funktioniert er nicht in Java 5, weil die Schnittstellen auch neue Klassen verwenden. Wir haben also 2 Versionen des Treibers. Gibt es eine Möglichkeit, eine Jar-Datei sowohl für Java 5 als auch für Java 6 zu haben?

2 Stimmen

Nur um klar zu sein, sind Sie einen JDBC-Treiber zu implementieren, anstatt mit einem?

0 Stimmen

Könnten Sie etwas mehr Informationen in die Frage einfügen? Wir verwenden jTDS, einen JDBC 3.0-Treiber, der in Java 5 und 6 funktioniert.

0 Stimmen

Ich denke, die Entscheidung sollte sein, ob Sie JDBC 3.0 oder 4.0 unterstützen, nicht unbedingt Java 5 oder 6.

8voto

Brad Cupit Punkte 6350

Wenn Sie einen JDBC 3.0-Treiber implementieren und Ihre Kunden ihn in Java 6 ausführen, erhalten sie Fehler, wenn sie eine der neuen JDBC 4.0-Methoden aufrufen. Dies ist selten, da diese neuen Methoden nicht sehr oft verwendet werden, aber wenn Sie narrensicher sein wollen, sollte die folgende Lösung (die ein Hack ist) den Trick erfüllen:

  1. mit Java 5 kompilieren (wenn Sie mit Java 6 kompilieren und in Java 5 ausführen, erhalten Sie einen Versionsfehler)
  2. Implementieren Sie Ihren normalen JDBC 3.0-Treiber, aber fügen Sie auch Implementierungen für die neuen JDBC 4.0-Methoden hinzu (Hinweis: Dies führt zu Kompilierfehlern, da Java 5 keine Typen wie java.sql.NClob definiert)
  3. eine exakte Kopie der neuen JDBC 4.0-Schnittstellen (wie java.sql.NClob) in einem separaten Projekt zu erstellen (es gibt jetzt also 2 Projekte: das ursprüngliche und dieses)
  4. Kompilieren Sie beide Projekte zusammen und erstellen Sie für jedes Projekt eine eigene Jar-Datei:
    • Ihre JDBC-Treiber-Implementierung (behalten Sie dieses jar)
    • die neuen JDBC 4.0-Schnittstellen (verwerfen Sie dieses jar)

Wir können die JDBC 4.0 Schnittstellen jar verwerfen, weil:

  • in Java 6 sind diese neuen JDBC 4.0-Schnittstellen definiert
  • in Java 5 definieren die JDBC 3.0-Schnittstellen die neuen Methoden (wie Connection.createNClob()) nicht, so dass Ihre Benutzer sie nicht aufrufen werden

Das einzige mögliche Problem könnte mit dem Java 5 Classloader zusammenhängen. Er könnte fehlschlagen, wenn er die neuen JDBC 4.0 Schnittstellen (wie java.sql.NClob) nicht finden kann. Ich glaube nicht, dass dies in der Sun JVM passiert, es sei denn, Sie rufen eine Methode auf, die eine dieser neuen Schnittstellen zurückgibt, so dass Sie keine Probleme haben sollten. Wenn ich mich irre und dies ein Problem ist, legen Sie einfach das verworfene jar (dasjenige, das die neuen JDBC 4.0-Schnittstellen definiert) auf Ihren Klassenpfad, wenn Sie in Java 5 laufen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X