Ejercicio: Aplicación en Java para Gestionar Datos entre Archivos CSV y MySQL

En este ejercicio, aprenderás cómo desarrollar una aplicación en Java que permita:

  1. Cargar un archivo CSV con información de empleados.
  2. Insertar esos datos en una base de datos MySQL.
  3. Configurar dinámicamente las credenciales de acceso a MySQL.
  4. Exportar datos desde la base de datos MySQL a un archivo CSV.

Al final del artículo, encontrarás la solución completa.


Enunciado del Ejercicio

Crea una aplicación Java con las siguientes funcionalidades:

  1. Interfaz gráfica:
    • Incluye cuatro botones:
      • Cargar Archivo CSV: Permite seleccionar un archivo CSV con datos de empleados.
      • Enviar Datos a MySQL: Inserta los datos cargados desde el CSV en una tabla MySQL.
      • Configurar Usuario y Contraseña: Solicita las credenciales de MySQL.
      • Exportar MySQL a CSV: Exporta los datos de la tabla MySQL a un archivo CSV.
  2. Estructura de la base de datos:
    • Crea una base de datos llamada empresa.
    • La tabla debe llamarse empleados y tener las columnas: id, nombre, edad, departamento.
  3. Requisitos técnicos:
    • Utiliza JDBC para la conexión con MySQL.
    • Maneja los archivos CSV usando las clases estándar de Java (BufferedReader y FileWriter).
    • Agrega un JFileChooser para seleccionar y guardar archivos.
  4. Comportamiento:
    • Si no se selecciona un archivo antes de presionar «Enviar Datos a MySQL», muestra un mensaje de advertencia.
    • Los datos exportados deben incluir encabezados en el archivo CSV generado.

Solución del Ejercicio

1. Configuración de la Base de Datos

Antes de ejecutar el programa, configura la base de datos en MySQL:

CREATE DATABASE empresa;
USE empresa;

CREATE TABLE empleados (
    id INT AUTO_INCREMENT PRIMARY KEY,
    nombre VARCHAR(100),
    edad INT,
    departamento VARCHAR(100)
);

2. Código Java

El siguiente código implementa la solución completa:

package Ejemplo.Ejercicio;

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.*;
import java.sql.*;

public class App {
    private static String dbUser = "root";  // Usuario predeterminado
    private static String dbPassword = ""; // Contraseña predeterminada

    public static void main(String[] args) {
        JFrame frame = new JFrame("Gestión de Datos CSV y MySQL");
        frame.setSize(500, 300);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setLayout(new FlowLayout());

        JButton btnCargarCSV = new JButton("Cargar Archivo CSV");
        JButton btnEnviarDatos = new JButton("Enviar Datos a MySQL");
        JButton btnConfigurarBD = new JButton("Configurar Usuario y Contraseña");
        JButton btnExportarCSV = new JButton("Exportar MySQL a CSV");

        JLabel lblMensaje = new JLabel("");

        frame.add(btnCargarCSV);
        frame.add(btnEnviarDatos);
        frame.add(btnConfigurarBD);
        frame.add(btnExportarCSV);
        frame.add(lblMensaje);

        final File[] archivoSeleccionado = new File[1];

        // Botón: Cargar Archivo CSV
        btnCargarCSV.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                JFileChooser fileChooser = new JFileChooser();
                int seleccion = fileChooser.showOpenDialog(frame);

                if (seleccion == JFileChooser.APPROVE_OPTION) {
                    archivoSeleccionado[0] = fileChooser.getSelectedFile();
                    lblMensaje.setText("Archivo seleccionado: " + archivoSeleccionado[0].getName());
                }
            }
        });

        // Botón: Enviar Datos a MySQL
        btnEnviarDatos.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                if (archivoSeleccionado[0] != null) {
                    try (BufferedReader br = new BufferedReader(new FileReader(archivoSeleccionado[0]))) {
                        Connection conn = DriverManager.getConnection(
                                "jdbc:mysql://localhost:3306/empresa", dbUser, dbPassword);

                        String line;
                        br.readLine(); // Omitir encabezado
                        while ((line = br.readLine()) != null) {
                            String[] data = line.split(",");
                            String nombre = data[0];
                            int edad = Integer.parseInt(data[1]);
                            String departamento = data[2];

                            String sql = "INSERT INTO empleados (nombre, edad, departamento) VALUES (?, ?, ?)";
                            PreparedStatement stmt = conn.prepareStatement(sql);
                            stmt.setString(1, nombre);
                            stmt.setInt(2, edad);
                            stmt.setString(3, departamento);
                            stmt.executeUpdate();
                        }

                        JOptionPane.showMessageDialog(frame, "Datos enviados a MySQL exitosamente.", "Éxito", JOptionPane.INFORMATION_MESSAGE);
                        conn.close();
                    } catch (Exception ex) {
                        JOptionPane.showMessageDialog(frame, "Error: " + ex.getMessage(), "Error", JOptionPane.ERROR_MESSAGE);
                    }
                } else {
                    JOptionPane.showMessageDialog(frame, "Por favor, selecciona un archivo primero.", "Advertencia", JOptionPane.WARNING_MESSAGE);
                }
            }
        });

        // Botón: Configurar Usuario y Contraseña
        btnConfigurarBD.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                dbUser = JOptionPane.showInputDialog(frame, "Introduce el usuario de la base de datos:");
                dbPassword = JOptionPane.showInputDialog(frame, "Introduce la contraseña de la base de datos:");
                JOptionPane.showMessageDialog(frame, "Configuración actualizada correctamente.", "Configuración", JOptionPane.INFORMATION_MESSAGE);
            }
        });

        // Botón: Exportar MySQL a CSV
        btnExportarCSV.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                try {
                    Connection conn = DriverManager.getConnection(
                            "jdbc:mysql://localhost:3306/empresa", dbUser, dbPassword);

                    String sql = "SELECT * FROM empleados";
                    Statement stmt = conn.createStatement();
                    ResultSet rs = stmt.executeQuery(sql);

                    JFileChooser fileChooser = new JFileChooser();
                    fileChooser.setDialogTitle("Guardar Archivo CSV");
                    if (fileChooser.showSaveDialog(frame) == JFileChooser.APPROVE_OPTION) {
                        File file = fileChooser.getSelectedFile();
                        String filePath = file.getAbsolutePath();

                        if (!filePath.endsWith(".csv")) {
                            filePath += ".csv";
                        }

                        BufferedWriter bw = new BufferedWriter(new FileWriter(filePath));
                        bw.write("ID,Nombre,Edad,Departamento");
                        bw.newLine();

                        while (rs.next()) {
                            bw.write(rs.getInt("id") + "," + rs.getString("nombre") + "," +
                                     rs.getInt("edad") + "," + rs.getString("departamento"));
                            bw.newLine();
                        }

                        bw.close();
                        JOptionPane.showMessageDialog(frame, "Datos exportados a " + filePath, "Éxito", JOptionPane.INFORMATION_MESSAGE);
                    }

                    conn.close();
                } catch (Exception ex) {
                    JOptionPane.showMessageDialog(frame, "Error: " + ex.getMessage(), "Error", JOptionPane.ERROR_MESSAGE);
                }
            }
        });

        frame.setVisible(true);
    }
}

Consejos para Resolver el Ejercicio

  1. Comprender los Requisitos:
    • Antes de escribir código, asegúrate de entender lo que se pide.
    • Divide el problema en partes más pequeñas.
  2. Manejo de Errores:
    • Usa try-catch para prevenir que errores inesperados rompan la aplicación.
    • Muestra mensajes claros al usuario.
  3. Uso de Herramientas:
    • Aprovecha bibliotecas estándar y recursos como JFileChooser para mejorar la experiencia del usuario.
  4. Pruebas:
    • Prueba cada funcionalidad por separado antes de integrarlas.

Con este enfoque, puedes resolver ejercicios similares con éxito. ¡Buena suerte!

Deja un comentario

Información básica sobre protección de datos Ver más

  • Responsable: Tomas Gonzalez.
  • Finalidad:  Moderar los comentarios.
  • Legitimación:  Por consentimiento del interesado.
  • Destinatarios y encargados de tratamiento:  No se ceden o comunican datos a terceros para prestar este servicio.
  • Derechos: Acceder, rectificar y suprimir los datos.
  • Información Adicional: Puede consultar la información detallada en la Política de Privacidad.

error: Content is protected !!

Descubre más desde Tomás González: Formador y Desarrollador Web

Suscríbete ahora para seguir leyendo y obtener acceso al archivo completo.

Seguir leyendo

Este sitio web utiliza cookies, si necesitas más información puedes visitar nuestra política de privacidad    Ver
Privacidad