2011-05-05 17 views
12

Estamos construyendo una aplicación Java respaldada por una base de datos Oracle a la que accedemos usando JDBC (controladores ojdbc6.jar y orai18n.jar). El esquema de la base de datos almacena columnas de texto principalmente utilizando el tipo de datos NVARCHAR2.¿Debo utilizar JDBC getNString() en lugar de getString()?

El JDBC documentation para el JDBC ResultSet dice que getNString() está destinado particularmente para su uso con el NCHAR, NVARCHAR etc. tipos de datos, pero por el momento sólo estamos usando getString().

Esto parece funcionar bien, así que me pregunto por qué debería usar getNString() en lugar de getString(). ¿getString() va a comenzar a fallar si se ingresan caracteres que no son ASCII, o es el controlador JDBC de Oracle indiferente en cuanto a qué método debo usar?

EDITAR: Parece que puede depender de la base de datos: SQL Server doesn't seem to mind which you use, dependiendo de los parámetros de conexión. ¿Alguien tiene información específica sobre Oracle?

Respuesta

7

he hecho una prueba en nuestra aplicación y parece que es innecesario getNString() con Java 6, 6 JDBC, JDBC de Oracle 6 conductores y Oracle 11.1.0.6.0 . La cadena de prueba que utilicé fue "Δ, Й, ק, م, 7, あ, 叶, 葉, y copiada de http://en.wikipedia.org/wiki/Unicode.

La mayor parte de nuestro acceso a datos se realiza a través de procedimientos almacenados. Java pudo establecer y recuperar la cadena de prueba anterior correctamente a través de setObject() y getString() (no setString() por razones de abstracción), recopilando datos de la interfaz y escribiéndolos de nuevo en la interfaz como se esperaba.

Por lo tanto, getString() funciona bien para datos Unicode con Oracle 11g (como SQL Server como en el enlace de arriba) así que continuaremos usándolo en lugar de getNString().

+2

Sugiero que agregue esa prueba a su suite de regresión en caso de que cambie en las versiones futuras de Oracle o Java – artbristol

+0

@artbristol - esa es una muy buena idea. Incluso un cambio en la configuración de Oracle podría causar una regresión (aunque no tengo motivos para creer eso, excepto por la experiencia con la configuración de Oracle) – Gnat

2

Si su base de datos utiliza el tipo de datos NVARCHAR2, está diseñado para almacenar datos multilingües. Su programa se romperá si se almacenan datos Unicode en esas columnas. Si yo fuera usted, me gustaría pasar a los métodos getNXXX()

Cuestiones relacionadas