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¶
-
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
-
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("ú", "ú");