ojdbc14.jar vs ojdbc6.jar
J'ai remarqué la différence suivante, mais n'est pas documentée n'importe où. Je me demandais si d'autres personnes ont remarqué la même chose ou peut m'indiquer quelques documentations qui prouve 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'ai essayer de mettre cela dans une java.sql.Date variable alors tout fonctionne bien. Exemple:
Date annualDate = (Date) map.get("exam_date");
ojdbc6.jar: si pl/sql renvoie une variable de type DATE
et j'ai essayer de mettre cela dans une java.sql.Variable de Date puis-je obtenir une exception:
java.lang.ClassCastException: java.sql.Timestamp cannot be cast to java.sql.Date
- Ne pouvez-vous pas appel getDate('exam_date') sur le result_set, et obtenir une date correcte et pas un timestamp?
- Je suis en train de vivre le même genre de problème après la mise à niveau à partir de ojdbc14 à ojdbc6. Je serais vraiment reconnaissant si quelqu'un pouvait examiner ce problème et de me fournir une réponse stackoverflow.com/questions/46543694/...
Vous devez vous connecter pour publier un commentaire.
En fait, ojdbc14.jar ne veut pas vraiment dire quelque chose à propos de la vraie version du pilote (voir Téléchargements de pilotes JDBC), sauf qu'elle est antérieure à Oracle 11g. Dans une telle situation, vous devez fournir la version exacte.
De toute façon, je pense que vous en trouverez l'explication dans Ce qui se passe avec la DATE et l'HORODATAGE? En bref, ils ont changé le comportement en 9.2 pilotes, puis de nouveau en 11.1 pilotes.
Ce qui pourrait expliquer les différences que vous êtes en train de vivre (et je vous conseille d'utiliser la version la plus récente c'est à dire de 11,2 pilotes).
"14" et "6" dans les noms de pilotes reportez-vous à la JVM ils ont été écrits pour. Si vous êtes toujours à l'aide du JDK 1.4, je dirais que vous avez un problème et besoin de mise à niveau. JDK 1.4, depuis longtemps, sa durée de vie. Il n'avait même pas les génériques! JDK 6 u21 est la production standard d'Oracle/Sun. Je conseillerais de le changer si vous ne l'avez pas déjà.
J'ai le même problème!
Trouve dans oracle site
texte du lien
Comme mentionné ci-dessus, l'11.1 pilotes par défaut convertir SQL DATE d'Horodatage lors de la lecture à partir de la base de données. Cela a toujours été la bonne chose à faire et le changement dans 9i était une erreur. L'11.1 les conducteurs ont repris le comportement correct. Même si vous n'avez pas défini de V8Compatible dans votre application, vous ne devriez pas voir une différence dans le comportement, dans la plupart des cas. Vous pouvez remarquer une différence si vous utilisez la fonction getObject pour lire une colonne de DATE. Le résultat sera un Timestamp plutôt qu'une Date. Depuis le Timestamp est une sous-classe de la Date ce n'est généralement pas un problème. Lorsque vous remarquerez peut-être une différence est que si vous vous basez sur la conversion de DATE à DATE à tronquer le temps composant ou si vous ne toString sur la valeur. Sinon, le changement doit être transparent.
Si, pour quelque raison que votre application est très sensible à ce changement, et vous devez simplement avoir la 9i-10g de comportement, il est une propriété de la connexion que vous pouvez définir. Ensemble mapDateToTimestamp à false et que le pilote va revenir à la valeur par défaut 9i-10g comportement et la carte de DATE à DATE.
Aussi, à partir de ojdbc14 à ojdbc6, plusieurs types (par exemple,
OracleResultSet
,OracleStatement
) a été déplacé de packageoracle.jdbc.driver
àoracle.jdbc
.