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:
- mit Java 5 kompilieren (wenn Sie mit Java 6 kompilieren und in Java 5 ausführen, erhalten Sie einen Versionsfehler)
- 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)
- 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)
- 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.
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.
0 Stimmen
Ja. Ich schreibe einen Treiber für eine spezielle Datenbank. JDBC 4.0 ist mir eigentlich egal. Das Problem ist, dass ich nicht weiß, wie ich einen JDBC 3.0-Treiber erstellen kann, der auch in Java 6.0 funktioniert. Ich werde einen Blick auf jTDS werfen. Vielen Dank!