J'ai remarqué la différence suivante mais je ne l'ai vue nulle part. Je me demande si d'autres ont remarqué la même chose ou peuvent me signaler des documentations qui prouvent la même chose.
Env: -
Oracle 11g, JDK 1.6, iBatis, PL/SQL
Scénario:-
ojdbc14.jar: si pl/sql renvoie une variable de type DATE
et j'essaie de mettre cela dans une variable Java.sql.Date alors tout fonctionne bien. Exemple:
Date annualDate = (Date) map.get("exam_date");
ojdbc6.jar: si pl/sql retourne une variable de type DATE
et j'essaye de la mettre dans une variable Java.sql.Date alors j'obtiens une exception:
Java.lang.ClassCastException: Java.sql.Timestamp cannot be cast to Java.sql.Date
En fait, ojdbc14.jar ne dit vraiment rien sur la version réelle du pilote (voir Téléchargements de pilotes JDBC ), sauf qu'il est antérieur à Oracle 11g. Dans une telle situation, vous devez fournir la version exacte.
Quoi qu'il en soit, je pense que vous trouverez des explications dans Que se passe-t-il avec DATE et TIMESTAMP? En bref, ils ont changé le comportement dans les pilotes 9.2 puis à nouveau dans les pilotes 11.1.
Cela pourrait expliquer les différences que vous rencontrez (et je suggère d'utiliser la version la plus récente, c'est-à-dire les pilotes 11.2).
Le "14" et le "6" dans ces noms de pilote font référence à la machine virtuelle Java pour laquelle ils ont été écrits. Si vous utilisez toujours JDK 1.4, je dirais que vous avez un problème grave et que vous devez effectuer une mise à niveau. JDK 1.4 a depuis longtemps dépassé sa durée de vie utile. Il n'avait même pas de génériques! JDK 6 u21 est la norme de production actuelle d'Oracle/Sun. Je recommanderais d'y passer si vous ne l'avez pas déjà fait.
J'ai le même problème!
Trouvé suivant sur le site Oracle texte du lien
Comme mentionné ci-dessus, les pilotes 11.1 par défaut convertissent SQL DATE en horodatage lors de la lecture à partir de la base de données. C'était toujours la bonne chose à faire et le changement de 9i était une erreur. Les pilotes 11.1 sont revenus au comportement correct. Même si vous n'avez pas défini V8Compatible dans votre application, vous ne devriez voir aucune différence de comportement dans la plupart des cas. Vous pouvez remarquer une différence si vous utilisez getObject pour lire une colonne DATE. Le résultat sera un horodatage plutôt qu'une date. Étant donné que Timestamp est une sous-classe de Date, ce n'est généralement pas un problème. Vous remarquerez peut-être une différence si vous vous fiez à la conversion de DATE à Date pour tronquer la composante horaire ou si vous effectuez toString sur la valeur. Sinon, le changement doit être transparent.
Si, pour une raison quelconque, votre application est très sensible à ce changement et que vous devez simplement avoir le comportement 9i-10g, vous pouvez définir une propriété de connexion. Définissez mapDateToTimestamp sur false et le pilote reviendra au comportement par défaut 9i-10g et mappera DATE à Date.
De plus, de ojdbc14 à ojdbc6, plusieurs types (par exemple, OracleResultSet
, OracleStatement
) ont été déplacés du package Oracle.jdbc.driver
à Oracle.jdbc
.