es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

El objeto java.sql.ResultSet devuelve cadenas truncadas después de aumentar la longitud de la columna.

Tengo una tabla alpha en una base de datos Oracle 11g con las siguientes columnas: id INTEGER, data VARCHAR2(5) y last_update TIMESTAMP.

Realizo la consulta de la tabla a través de la columna clave (id) desde una aplicación Java 8 alojada en el servidor WebLogic 12. La consulta se implementa en la clase NamedParameterJdbcDaoSupport del Framework Spring 4.2, y los resultados se obtienen mediante la iteración del objeto java.sql.ResultSet devuelto.

Hasta aquí todo bien. Obtengo 0 o 1 registro, dependiendo de si se encuentra o no el valor de id en la consulta. Las columnas data y last_update se recuperan directamente de la tabla de la base de datos.

Tuve que aumentar el tamaño de la columna data a 6 bytes por un nuevo requisito utilizando la sentencia ALTER TABLE alpha MODIFY data VARCHAR2(6);. Actualicé todas las filas con valores de 6 caracteres para la columna data y la hora actual para la columna last_update. Cuando consulté la tabla desde cualquier cliente SQL, vi los valores de 6 caracteres para la columna data y el valor correcto de last_update que actualicé.

Pero la aplicación Java 8 sigue recuperando el valor de 5 caracteres para la columna data. Los valores de last_update recuperados son los valores correctos que actualicé. No hay ningún código de recorte de longitud en la aplicación, y los getters y setters están en un simple POJO.

Vi un problema similar en Coderanch, pero incluso allí no veo la causa que se enumera o una solución adecuada. Cualquier ayuda es apreciada.

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Solución:

    El problema podría ser debido al almacenamiento en caché de los metadatos de la tabla por parte del servidor de aplicaciones. Ya que la estructura de la tabla fue modificada después de que el servidor de aplicaciones se inició, este podría no estar al tanto del nuevo tamaño de columna actualizado.

    Para resolver este problema, intente reiniciar el servidor de aplicaciones para borrar la caché y obtener la información de metadatos actualizada. Si esto no funciona, intente actualizar manualmente la caché de metadatos utilizando el procedimiento DBMS_UTILITY.ANV_MODIFY_SCHEMA de la base de datos Oracle.

    Otra posible solución es verificar si la aplicación está utilizando alguna asignación personalizada para la columna data. Si es así, actualice la asignación para utilizar una cadena de longitud 6 en lugar de 5.

    Por último, asegúrese de que la aplicación esté utilizando la última versión del controlador JDBC de Oracle que admita Oracle 11g y sea compatible con Java 8. Si el controlador es anticuado, puede que no sea capaz de recuperar correctamente el tamaño de columna actualizado.

    Con suerte, una de estas soluciones ayudará a resolver el problema.

Comments are closed.