Saltar a contenido

Error al guardar muestra

Resumen

  • Tarea gforge: 3486 Error al guardar muestra - Problema con juego de caracteres
  • Ficheros modificados:
  • HIPEClaseMutacionOAD.java
  • HIPECargaFicherosLN.java
  • Incluido en versión: 1.5.0 - 1.5.2
  • Subido al svn: 373
  • Fechas
  • Fecha de inicio: 10/06/2019
  • Fecha de fin: 11/06/2019
  • Fecha de validación: 11/06/2019

Incidencia

  1. Al intentar grabar el resultado de la muestra 4818-4 de Soria da el siguiente error:

    No se puede determinar la clase de mutación: Cambio de aminoácido

  2. Una vez solucionado el error 1 da el siguiente error:

ORA-01858: Se ha encontrado un carácter no numérico donde se esperaba uno numérico ORA- 06512: en línea 1

Solución

Error 1

Parece que es un problema al leer del fichero caracteres acentuados y compararlo con lo que hay grabado en base de datos.

En HIPEClaseMutacionOAD.java se hace la siguiente consulta:

String sql = "SELECT C_CLASE_MUTA_ID "+
            "FROM HIPE_CLASE_MUTACION "+
            "WHERE UPPER(D_CLASE_MUTA_LARGA)=?";        

que devuelve nulo, ya que del fichero está leyendo aminoácido y en base de datos está aminoácido, por lo que la comparación da error.

Haciendo esta nueva consulta en la que se corrigen los posibles caracteres á mal codificados funciona correctamente:

String sql = "SELECT C_CLASE_MUTA_ID "+
            "FROM HIPE_CLASE_MUTACION "+
            "WHERE UPPER(D_CLASE_MUTA_LARGA) = TRANSLATE(?,  'á', 'Á')"

Error 2

El problema es que el principio del fichero tiene los caracteres . Esto sucede cuando se graba un fichero como UTF-8 con Bom, en este caso se graban al principio del fichero esos caracteres para indicar el byte order match.

Como el primer bloque de caracteres (hasta el primer ;) se considera como la fecha del resultado es necesario quitar esos caracteres de control de la fecha.

En HIPECargaFicherosLN.java en el método generaDatos se modifica:

//1º:Fecha resultados
String datos[]=(grupo[0].split(separador));
String fecha = datos[0]; 

por

//1º:Fecha resultados
String datos[]=(grupo[0].split(separador));
String fecha = datos[0].replace("",""); 

Mejoras

Aunque no dan error también se modifican los posibles caracteres extraños al cargar los distintos campos, para que en la base de datos queden grabados correctamente:

  /* [3486]
   * Se limpia el fichero de caracteres extraños, 
   * en caso de que se haya grabado con distinta codificación o juego de caracteres de los esperados
   * 
   *  -> Con ("","") se elimina el principio de línea de 'byte order mark' por si el fichero se sube en formato UTF-8 con BOM
   * á -> Corresponde a á en los ficheros grabados como UTF-8, en lugar de ASCII
   * ó -> Corresponde a ó en los ficheros grabados como UTF-8, en lugar de ASCII
   * é -> Corresponde a é en los ficheros grabados como UTF-8, en lugar de ASCII
   * í -> Corresponde a í en los ficheros grabados como UTF-8, en lugar de ASCII
   * ú -> Corresponde a ú en los ficheros grabados como UTF-8, en lugar de ASCII 
   */ 
  linea = linea.replace("", "").replaceAll("á", "á").replaceAll("ó", "ó").replaceAll("é", "é").replaceAll("í", "í").replaceAll("ú", "ú");

Última actualización: March 10, 2022