2009-08-06 4 views
4

Java 6 wird mit JDBC 4 geliefert, das nicht abwärtskompatibel zu JDBC ist, das mit früheren Versionen von Java ausgeliefert wurde.Wie funktioniert der JDBC-Treiber in Java 5 & 6?

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 es in Java 5 nicht, da die Schnittstellen auch neue Klassen verwenden. Also wir haben 2 Versionen des Treibers. Gibt es eine Möglichkeit, ein Jar für Java 5 und 6 zu haben?

+2

Nur um klar zu sein, du implementierst einen JDBC-Treiber , anstatt einen zu benutzen? –

+0

Können Sie ein wenig mehr Informationen in die Frage bringen. Wir verwenden jTDS, das ist ein JDBC 3.0 Treiber und es funktioniert in Java 5 und 6. – banjollity

+0

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

Antwort

8

Wenn Sie einen JDBC 3.0-Treiber implementieren und Ihre Clients ihn in Java 6 ausführen, erhalten sie Fehler, wenn sie eine der neuen JDBC 4.0-Methoden aufrufen. Das ist selten, da diese neuen Methoden nicht sehr häufig verwendet werden, aber wenn Sie narrensicher sein sollen, die folgende Lösung (die ein Hack ist) sollte es tun:

  1. mit 5 Java kompilieren (Wenn Sie mit Java 6 kompilieren und in Java 5 ausführen, erhalten Sie einen Versionskonfliktfehler.
  2. Implementieren Sie Ihren normalen JDBC 3.0 - Treiber, aber auch Implementierungen für die neuen JDBC 4.0 - Methoden (Hinweis: Dies führt zu Kompilierungsfehlern, weil Java 5 definiert keine Typen wie java.sql.NClob)
  3. erstellen Sie ein genaues Replikat der neuen JDBC 4.0-Schnittstellen (wie java.sql.NClob) in einem separaten Projekt (also jetzt gibt es 2 Projekte: das Original und dieser)
  4. beiden Projekte zusammenstellen zusammen, und ein separates Glas pro Projekt machen:
    • Ihre JDBC-Treiber-Implementierung (dieses Glas halten)
    • die neuen JDBC 4.0-Schnittstellen (verwerfen dieser jar)

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

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

Das einzige mögliche Problem mit dem Java sein könnte 5 Klassenlader. Es kann fehlschlagen, wenn es die neuen JDBC 4.0-Schnittstellen (wie java.sql.NClob) nicht finden kann. Ich denke nicht, dass dies in der Sun JVM passieren wird, es sei denn, Sie rufen eine Methode auf, die eine dieser neuen Schnittstellen zurückgibt, also sollten Sie gut sein. Wenn ich falsch liege und dies ein Problem ist, lege einfach das verworfene jar (das, das die neuen JDBC 4.0-Schnittstellen definiert hat) in deinem Klassenpfad ab.

Verwandte Themen