lunes, 8 de julio de 2013

Crear código SQL en Java a partir de una consulta

En una ocasión tuve la necesidad de respaldar ciertos datos de una base de datos MySql, los usuarios del programa tenian que generar a partir de una consulta los datos a exportar. De ésta forma tuve que buscar la manera de crear el código de inserción a la base de datos a partir de un conjunto de datos obtenidos a partir de una consulta a la BD.

El caso es el siguiente: Se tiene una consulta X, se requiere guardar a un archivo la exportación de la consulta y conocemos el nombre de la tabla de la cual se extrajo la información.
El primer procedimiento era usar las mismas herramientas que proporciona MySQL para llevar a cabo la exportación, solo que no todas las máquinas que usaban el programa se les podia instalar los ejecutables necesarios para llevar éste método; así que se decidió que se hiciera de forma plana (SQL) en archivos de textos importables a la Base de Datos final.

El método que se creo fue el siguiente:

    /**
     * Método que crea cadenas insert para cada datos leido de una consulta
     * @param entrada Consulta a crear los inserts
     * @param archivo Ruta del archivo a escribir
     * @param tabla Nombre de la tabla donde se insertaran los datos
     * @return Si se pudo o no realizar la conversión
     */
    public boolean creaInsert(ResultSet entrada, String archivo, String tabla) {
        try {
            ResultSet salidaRS = entrada;
            ResultSetMetaData rsmd = salidaRS.getMetaData();
            String consulta = "";
            consulta = "insert into " + tabla + " (";
            for (int k = 1; k < rsmd.getColumnCount(); k++) {
                consulta = consulta + rsmd.getColumnName(k + 1) + ",";
            }
            consulta = consulta.substring(0, consulta.length() - 1) + ") VALUES(";
            for (int k = 1; k < rsmd.getColumnCount(); k++) {
                if (rsmd.getColumnTypeName(k + 1).contains("INTEGER")) {
                    consulta = consulta + "" + salidaRS.getString(k + 1) + ",";
                } else if (salidaRS.getString(k + 1) == null || salidaRS.getString(k + 1).contains("null") || salidaRS.getString(k + 1).contains("----")) {
                    consulta = consulta + "null,";
                } else {
                    consulta = consulta + "'" + salidaRS.getString(k + 1) + "',";
                }
            }
            consulta = consulta.substring(0, consulta.length() - 1) + ");";
            File f;
            f = new File(tabla + ".txt");
            if (!f.exists()) {
                f.createNewFile();
            }
            escribeArchivo(tabla, consulta);
            return true;
        } catch (Exception a) {
            a.printStackTrace();
        }
        return false;
    }

De ésta forma se crea un archivo que contiene los inserts correspondientes a la consulta pasada como parámetro.

No hay comentarios:

Publicar un comentario