2009-04-16 25 views
13

¿Por qué diablos Oracle ofrece una versión diferente (!) Del controlador JDBC, p. ojdbc14.jar, para cada versión de base de datos (!)?
Todos los archivos tienen diferentes tamaños y, por lo tanto, probablemente un contenido diferente.oracle jdbc versión del controlador locura

fondo:
Se obtiene un error al azar y aparentemente irreproducible al decir "número inválido" al guardar los datos (suponemos que es la marca de tiempo). Pero no es una declaración particular. La mayoría de las veces, guarda bien. Solo una vez al mes, una declaración inofensiva fallará.

Así que eché un vistazo más de cerca al sitio de descarga de Oracle y noté que ninguno de los tamaños de archivos coincide a pesar de que los archivos comparten el mismo nombre.

Nuestro producto se ejecuta en bases de datos mantenidas por nuestros clientes, es decir, cualquier versión y parche que ejecuten los clientes es lo que es.
Entonces, ¿qué controlador usamos? La última (Oracle 11g): a pesar de que generalmente es 9i y 10g bases de datos?

¿Por qué no vinculan todas las versiones al mismo archivo "un controlador se adapta a todos"?
¿O hay pequeñas diferencias que conducen a efectos como nuestros errores aleatorios?

EDITAR: me equivoqué con las bases de datos 9i.

+1

La "versión" en el nombre del archivo del controlador se refiere a la ** versión de Java ** para la que están destinadas, no a la versión del controlador. Hice la costumbre de guardar el archivo jar con la versión del controlador adjuntada al descargarlos, p. 'ojdbc6-11.2.0.3.0.jar'. Solo busca los últimos controladores. –

Respuesta

16

favor ver la matriz de compatibilidad en http://www.oracle.com/technetwork/database/enterprise-edition/jdbc-faq-090281.html#02_02

También tome en cuenta que el tipo de datos de marca de tiempo sólo está disponible desde Oracle 10.

+0

Estos controladores "pueden hablar con" casi cualquier versión de base de datos moderna. Entonces, ¿estás diciendo que acabo de elegir el último lanzamiento y cruzo los dedos para ver que tiene todas las correcciones de errores que necesito? ...y estaba equivocado sobre los 9i. Los jubilamos el año pasado. – Stroboskop

+0

bueno, dudo que sea un error en el controlador jdbc. inspeccionaría el código de errores de transmisión numérica, "número a cadena", "cadena a fecha", etc. ¿Estamos hablando de ORA-01722, número inválido? De ser así, verificaría los registros de depuración y no me importarían los conflictos de versión del controlador. –

+1

Sí, es ORA-01722. Utilizamos PreparedStatements, lo que significa que las conversiones de tipo las realiza el controlador. Y la misma declaración funciona bien el 99.9% del tiempo. Por supuesto, miramos nuestro código primero, pero parece que no hay nada fuera de lo común. – Stroboskop

2

Cuando nos dieron nuestra base de datos de Oracle desde 8.1.7 a 10.2.0, Pude usar el mismo controlador jdbc de Oracle (ojdbc14.jar). Así que su controlador jdbc admite bastantes versiones al mismo tiempo. Por supuesto, es posible que algunos de los controladores tengan errores, pero el plan es admitir más versiones al mismo tiempo.

0

Los números en ojdbc14.jar, ojdbc5.jar, ojdbc6.jar, ojdbc7.jar y ojdbc8. jar se refiere a la versión del compilador de Java que se utilizó. Con cada versión de Java vienen las nuevas API de JDBC, por lo que estas cifras son útiles para saber qué esperar. Por ejemplo, en Java 8, hay un nuevo método executeLargeUpdate en java.sql.PreparedStatement. Este método se implementará en ojdbc8.jar pero no en ojdbc7.jar. Además, si su tiempo de ejecución usa Java 7, entonces sabrá que no puede usar ojdbc8.jar, de lo contrario, se encontrará con un error java.lang.UnsupportedClassVersionError. Estas son las razones por las cuales Oracle incluye estos números en el nombre del contenedor. También tenga en cuenta que si desea saber de qué versión de Oracle Database proviene el jar, puede ejecutar java -jar ojdbc8.jar. Tanto la base de datos como el controlador son compatibles con versiones anteriores (hasta 1 versión principal), por lo tanto, aunque se lo recomiende, no es necesario que utilice la misma versión del producto en ambos niveles.

Cuestiones relacionadas