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.

¿Cómo puedo exportar registros de una base de datos a un archivo CSV sin utilizar un delimitador de caracteres?

Tengo el siguiente código que exporta correctamente los datos de una tabla a un archivo CSV. Sin embargo, el penúltimo parámetro (CHARACTERDELIMITER) en el procedimiento requiere una entrada CHAR(1).

StringBuilder exportBuilder = new StringBuilder("CALL SYSCS_UTIL.SYSCS_EXPORT_QUERY('");
exportBuilder.append(joinQuery.toString()); 
exportBuilder.append("', 'r:/exported_file.csv', NULL, '\u0000', NULL)");
CallableStatement exportStatement = conn.prepareCall(exportBuilder.toString());
exportStatement.execute();

Me gustaría que no haya caracteres que rodeen los tokens en el archivo CSV (sin contar el delimitador de columna ‘,’), pero el procedimiento anterior exporta los datos con un caracter NUL (nulo) que rodea las cadenas y fechas.

Se utilizó el caracter ‘\u0000’ porque funcionó en un procedimiento de importación similar donde los datos no estaban rodeados por ningún caracter (sin contar el delimitador de columna ‘,’).

He visto que Db2 tiene una opción ‘nochardel’ que se puede utilizar para lograr lo que estoy buscando, pero no puedo encontrar lo mismo para Apache Derby. Me gustaría usar estos procedimientos en lugar de un BufferedReader. Estaré importando/exportando posiblemente cinco millones de registros.

Enlace de referencia: https://db.apache.org/derby/docs/10.14/ref/rrefexportselectionproc.html

Gracias por cualquier ayuda.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para eliminar el carácter NUL que rodea a las cadenas y fechas en el archivo CSV exportado, puedes intentar reemplazar el carácter ”\u0000” con una cadena vacía (”). Esto se puede hacer modificando el método exportBuilder.append() en el código de la siguiente manera:

    exportBuilder.append("', 'r:/exported_file.csv', NULL, ‘’, NULL)");
    

    Esto debería eliminar cualquier carácter que rodee los datos exportados. Sin embargo, ten en cuenta que eliminar estos caracteres puede causar problemas con el formato de los datos en el archivo CSV, por lo que debes probar exhaustivamente los datos exportados para asegurarte de que se importen correctamente.

    Alternativamente, puedes intentar usar un carácter delimitador diferente que no sea un carácter NUL. Por ejemplo, podrías usar el carácter de tubería (‘|’) como parámetro CHARACTERDELIMITER en el procedimiento SYSCS_UTIL.SYSCS_EXPORT_QUERY(). Esto debería lograr el mismo resultado sin necesidad de modificar el código.

    Desafortunadamente, como mencionaste, Apache Derby no tiene una opción ‘nochardel’, por lo que estas soluciones alternativas pueden ser la mejor solución para tus necesidades.

Comments are closed.