Ejercicio: Crear una Aplicación en Java para Gestionar Datos entre Archivos TXT y PostgreSQL

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

  1. Cargar un archivo de texto (.txt) con datos de clientes.
  2. Insertar esos datos en una base de datos PostgreSQL.
  3. Configurar dinámicamente las credenciales de acceso a la base de datos.
  4. Exportar los datos de la base de datos PostgreSQL a un archivo de texto (.txt).

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 TXT: Permite seleccionar un archivo .txt con datos de clientes.
      • Enviar Datos a PostgreSQL: Inserta los datos cargados desde el archivo en una tabla PostgreSQL.
      • Configurar Usuario y Contraseña: Solicita credenciales de PostgreSQL.
      • Exportar PostgreSQL a TXT: Recupera datos de la base de datos y los guarda en un archivo .txt.
  2. Formato del archivo TXT:
    • Cada línea del archivo contiene los datos en el siguiente formato:
      nombre,edad,ciudad
      Ejemplo:
      Juan Pérez,30,Madrid
  3. Estructura de la base de datos:
    • Crea una base de datos llamada empresa.
    • Crea una tabla llamada clientes con las columnas id, nombre, edad y ciudad.
  4. Comportamiento:
    • Si no se selecciona un archivo antes de presionar «Enviar Datos a PostgreSQL», muestra un mensaje de advertencia.
    • Los datos exportados deben incluir encabezados en el archivo generado.

Solución del Ejercicio

1. Configuración de la Base de Datos

Antes de ejecutar el programa, configura PostgreSQL con los siguientes comandos:

CREATE DATABASE empresa;
\c empresa

CREATE TABLE clientes (
    id SERIAL PRIMARY KEY,
    nombre VARCHAR(100),
    edad INT,
    ciudad VARCHAR(100)
);

2. Código Java

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

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 = "postgres";  // Usuario predeterminado
    private static String dbPassword = "admin"; // Contraseña predeterminada

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

        JButton btnCargarTXT = new JButton("Cargar Archivo TXT");
        JButton btnEnviarDatos = new JButton("Enviar Datos a PostgreSQL");
        JButton btnConfigurarBD = new JButton("Configurar Usuario y Contraseña");
        JButton btnExportarTXT = new JButton("Exportar PostgreSQL a TXT");

        JLabel lblMensaje = new JLabel("");

        frame.add(btnCargarTXT);
        frame.add(btnEnviarDatos);
        frame.add(btnConfigurarBD);
        frame.add(btnExportarTXT);
        frame.add(lblMensaje);

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

        // Botón: Cargar Archivo TXT
        btnCargarTXT.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 PostgreSQL
        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:postgresql://localhost:5432/empresa", dbUser, dbPassword);

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

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

                        JOptionPane.showMessageDialog(frame, "Datos enviados a PostgreSQL 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 PostgreSQL a TXT
        btnExportarTXT.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                try {
                    Connection conn = DriverManager.getConnection(
                            "jdbc:postgresql://localhost:5432/empresa", dbUser, dbPassword);

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

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

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

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

                        while (rs.next()) {
                            bw.write(rs.getInt("id") + "," + rs.getString("nombre") + "," +
                                     rs.getInt("edad") + "," + rs.getString("ciudad"));
                            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. Configura PostgreSQL correctamente:
    • Asegúrate de que tu servidor PostgreSQL esté funcionando.
    • Verifica las credenciales y permisos.
  2. Prueba el archivo TXT:
    • Usa un editor de texto para crear un archivo con datos de prueba.
    • Asegúrate de que cada línea siga el formato correcto: nombre,edad,ciudad.
  3. Divide las funcionalidades:
    • Prueba cada botón por separado.
    • Verifica la conexión con la base de datos antes de enviar o exportar datos.
  4. Control de errores:
    • Agrega validaciones para asegurarte de que los datos del archivo son correctos.
    • Maneja excepciones comunes, como errores de conexión o formato incorrecto.

Con este enfoque, podrás construir una aplicación funcional y robusta para manejar datos entre archivos TXT y PostgreSQL. ¡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