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:
- mit 5 Java kompilieren (Wenn Sie mit Java 6 kompilieren und in Java 5 ausführen, erhalten Sie einen Versionskonfliktfehler.
- 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)
- 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)
- 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.
Nur um klar zu sein, du implementierst einen JDBC-Treiber , anstatt einen zu benutzen? –
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
Ich denke, die Entscheidung sollte sein, ob Sie JDBC 3.0 oder 4.0 unterstützen, nicht unbedingt Java 5 oder 6. –