Ejercicio: Crear una Aplicación en Java para Gestionar Datos entre Archivos JSON y MySQL

En este ejercicio, desarrollaremos una aplicación Java que permita:

  1. Cargar un archivo JSON con datos de productos.
  2. Insertar esos datos en una base de datos MySQL.
  3. Configurar dinámicamente las credenciales de acceso a MySQL.
  4. Exportar los datos de la base de datos MySQL a un archivo JSON.

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


Enunciado del Ejercicio

Crea una aplicación Java que permita:

  1. Interfaz gráfica:
    • Incluye cuatro botones:
      • Cargar Archivo JSON: Permite seleccionar un archivo JSON con datos de productos.
      • Enviar Datos a MySQL: Inserta los datos cargados desde el archivo en una tabla MySQL.
      • Configurar Usuario y Contraseña: Solicita credenciales de MySQL.
      • Exportar MySQL a JSON: Recupera datos de la base de datos y los guarda en un archivo JSON.
  2. Formato del archivo JSON:
    • El archivo debe contener un array de objetos, donde cada objeto represente un producto con los campos nombre, precio y categoria.
    • Ejemplo: [ {"nombre": "Laptop", "precio": 1500, "categoria": "Electrónica"}, {"nombre": "Silla", "precio": 100, "categoria": "Muebles"} ]
  3. Estructura de la base de datos:
    • Crea una base de datos llamada tienda.
    • Crea una tabla llamada productos con las columnas id, nombre, precio y categoria.
  4. Comportamiento:
    • Si no se selecciona un archivo antes de presionar «Enviar Datos a MySQL», muestra un mensaje de advertencia.
    • Los datos exportados deben seguir el formato JSON.

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 tienda;
USE tienda;

CREATE TABLE productos (
    id INT AUTO_INCREMENT PRIMARY KEY,
    nombre VARCHAR(100),
    precio DECIMAL(10, 2),
    categoria VARCHAR(100)
);

2. Código Java

Aquí está el código completo de la aplicación:

package Ejemplo.Ejercicio;

import com.google.gson.*;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.*;
import java.sql.*;
import java.util.ArrayList;
import java.util.List;

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 JSON y MySQL");
        frame.setSize(500, 300);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setLayout(new FlowLayout());

        JButton btnCargarJSON = new JButton("Cargar Archivo JSON");
        JButton btnEnviarDatos = new JButton("Enviar Datos a MySQL");
        JButton btnConfigurarBD = new JButton("Configurar Usuario y Contraseña");
        JButton btnExportarJSON = new JButton("Exportar MySQL a JSON");

        JLabel lblMensaje = new JLabel("");

        frame.add(btnCargarJSON);
        frame.add(btnEnviarDatos);
        frame.add(btnConfigurarBD);
        frame.add(btnExportarJSON);
        frame.add(lblMensaje);

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

        // Botón: Cargar Archivo JSON
        btnCargarJSON.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 (FileReader reader = new FileReader(archivoSeleccionado[0])) {
                        Gson gson = new Gson();
                        JsonArray productos = gson.fromJson(reader, JsonArray.class);

                        Connection conn = DriverManager.getConnection(
                                "jdbc:mysql://localhost:3306/tienda", dbUser, dbPassword);

                        for (JsonElement element : productos) {
                            JsonObject producto = element.getAsJsonObject();
                            String nombre = producto.get("nombre").getAsString();
                            double precio = producto.get("precio").getAsDouble();
                            String categoria = producto.get("categoria").getAsString();

                            String sql = "INSERT INTO productos (nombre, precio, categoria) VALUES (?, ?, ?)";
                            PreparedStatement stmt = conn.prepareStatement(sql);
                            stmt.setString(1, nombre);
                            stmt.setDouble(2, precio);
                            stmt.setString(3, categoria);
                            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 JSON
        btnExportarJSON.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                try {
                    Connection conn = DriverManager.getConnection(
                            "jdbc:mysql://localhost:3306/tienda", dbUser, dbPassword);

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

                    List<JsonObject> productos = new ArrayList<>();
                    while (rs.next()) {
                        JsonObject producto = new JsonObject();
                        producto.addProperty("id", rs.getInt("id"));
                        producto.addProperty("nombre", rs.getString("nombre"));
                        producto.addProperty("precio", rs.getDouble("precio"));
                        producto.addProperty("categoria", rs.getString("categoria"));
                        productos.add(producto);
                    }

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

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

                        Gson gson = new GsonBuilder().setPrettyPrinting().create();
                        try (FileWriter writer = new FileWriter(filePath)) {
                            gson.toJson(productos, writer);
                        }

                        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);
    }
}

3. Dependencias en Maven

Asegúrate de agregar las dependencias necesarias en tu archivo pom.xml:

<dependencies>
    <!-- Gson para manejo de JSON -->
    <dependency>
        <groupId>com.google.code.gson</groupId>
        <artifactId>gson</artifactId>
        <version>2.10</version>
    </dependency>
    <!-- Conector de MySQL -->
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>8.0.33</version>
    </dependency>
</dependencies>

Consejos para Resolver el Ejercicio

  1. Revisar el archivo JSON:
    • Asegúrate de que el archivo tenga un formato válido antes de cargarlo.
  2. Pruebas por Funcionalidad:
    • Primero, verifica la conexión con MySQL.
    • Luego, prueba cada botón de forma independiente.
  3. Validación:
    • Maneja errores como formatos JSON incorrectos o credenciales inválidas de MySQL.
  4. Exportación:
    • Asegúrate de que el archivo exportado siga el formato esperado.

Con esta solución, puedes construir una aplicación robusta que gestione datos entre archivos JSON y MySQL. ¡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