En este artículo aprenderás cómo desarrollar una aplicación en Java utilizando Swing, Apache POI y MySQL. Esta herramienta te permitirá cargar datos desde un archivo Excel a una base de datos MySQL, configurar credenciales de usuario y exportar datos de la base de datos a un archivo Excel.
Requisitos Previos
- Conocimientos básicos de Java: Familiaridad con clases, métodos y estructuras de control.
- Entorno de desarrollo: Eclipse o cualquier IDE compatible con Java.
- MySQL instalado y configurado.
- Bibliotecas necesarias:
- Apache POI para trabajar con archivos Excel.
- MySQL Connector para conectarse a la base de datos.
Funcionalidades de la Aplicación
La aplicación tiene las siguientes características:
- Cargar Archivo Excel: Permite al usuario seleccionar un archivo
.xlsx
y cargarlo para procesar los datos. - Enviar Datos a MySQL: Inserta los datos del archivo seleccionado a una tabla MySQL.
- Configurar Usuario y Contraseña: Cambia dinámicamente las credenciales de acceso a MySQL.
- Exportar MySQL a Excel: Recupera los datos de MySQL y permite guardarlos como un archivo Excel en una ubicación personalizada.
Estructura del Código
El programa está contenido en una clase principal App
, que reside en el paquete Ejemplo.Examen
. El código utiliza:
- Swing para la interfaz gráfica.
- Apache POI para manejar archivos Excel.
- JDBC para interactuar con MySQL.
Configuración Inicial
- Dependencias Maven Asegúrate de que tu proyecto incluya las siguientes dependencias en el archivo
pom.xml
:<dependencies> <!-- Apache POI para Excel --> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-ooxml</artifactId> <version>5.2.3</version> </dependency> <!-- Conector de MySQL --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.33</version> </dependency> </dependencies>
- Configura la Base de Datos Crea una base de datos llamada
trabajadores
y una tabla llamadadatos_trabajador
:CREATE DATABASE trabajadores; USE trabajadores; CREATE TABLE datos_trabajador ( id INT AUTO_INCREMENT PRIMARY KEY, nombre VARCHAR(100), edad INT, departamento VARCHAR(100) );
Implementación del Código
1. Crear la Interfaz Gráfica
Utiliza un JFrame
con los siguientes botones:
- Cargar Archivo Excel
- Enviar Datos a MySQL
- Configurar Usuario y Contraseña
- Exportar MySQL a Excel
Cada botón tiene un ActionListener
para manejar las acciones correspondientes.
2. Cargar Archivo Excel
Con un JFileChooser
, el usuario selecciona el archivo Excel. Este se procesa con Apache POI para leer los datos de las celdas.
btnCargarArchivo.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());
}
}
});
3. Enviar Datos a MySQL
Lee los datos del archivo Excel y los inserta en la tabla MySQL usando una conexión JDBC.
btnEnviarDatos.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
if (archivoSeleccionado[0] != null) {
try {
FileInputStream fis = new FileInputStream(archivoSeleccionado[0]);
Workbook workbook = new XSSFWorkbook(fis);
Sheet sheet = workbook.getSheetAt(0);
Connection conn = DriverManager.getConnection(
"jdbc:mysql://localhost:3306/trabajadores", dbUser, dbPassword);
for (Row row : sheet) {
if (row.getRowNum() == 0) continue; // Omitir encabezado
String nombre = row.getCell(0).getStringCellValue();
int edad = (int) row.getCell(1).getNumericCellValue();
String departamento = row.getCell(2).getStringCellValue();
String sql = "INSERT INTO datos_trabajador (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);
workbook.close();
fis.close();
conn.close();
} catch (Exception ex) {
JOptionPane.showMessageDialog(frame, "Error: " + ex.getMessage(), "Error", JOptionPane.ERROR_MESSAGE);
}
}
}
});
4. Configurar Usuario y Contraseña
Solicita al usuario el nombre de usuario y contraseña para conectarse a la base de datos.
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);
}
});
5. Exportar MySQL a Excel
Utiliza otro JFileChooser
para seleccionar la ubicación de guardado del archivo Excel.
btnExportarBD.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
try {
Connection conn = DriverManager.getConnection(
"jdbc:mysql://localhost:3306/trabajadores", dbUser, dbPassword);
String sql = "SELECT * FROM datos_trabajador";
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery(sql);
Workbook workbook = new XSSFWorkbook();
Sheet sheet = workbook.createSheet("Datos Trabajadores");
Row headerRow = sheet.createRow(0);
headerRow.createCell(0).setCellValue("ID");
headerRow.createCell(1).setCellValue("Nombre");
headerRow.createCell(2).setCellValue("Edad");
headerRow.createCell(3).setCellValue("Departamento");
int rowIndex = 1;
while (rs.next()) {
Row row = sheet.createRow(rowIndex++);
row.createCell(0).setCellValue(rs.getInt("id"));
row.createCell(1).setCellValue(rs.getString("nombre"));
row.createCell(2).setCellValue(rs.getInt("edad"));
row.createCell(3).setCellValue(rs.getString("departamento"));
}
JFileChooser fileChooser = new JFileChooser();
fileChooser.setDialogTitle("Guardar Archivo Excel");
if (fileChooser.showSaveDialog(frame) == JFileChooser.APPROVE_OPTION) {
File file = fileChooser.getSelectedFile();
FileOutputStream fos = new FileOutputStream(file + ".xlsx");
workbook.write(fos);
fos.close();
workbook.close();
JOptionPane.showMessageDialog(frame, "Datos exportados exitosamente.", "Éxito", JOptionPane.INFORMATION_MESSAGE);
}
conn.close();
} catch (Exception ex) {
JOptionPane.showMessageDialog(frame, "Error: " + ex.getMessage(), "Error", JOptionPane.ERROR_MESSAGE);
}
}
});
Consejos si Estás en un Examen
- Prepara el Entorno: Asegúrate de que tu entorno de desarrollo esté configurado correctamente antes de comenzar.
- Divide el Problema: Enfócate en una funcionalidad a la vez.
- Comprueba la Conexión a MySQL: Verifica las credenciales y la base de datos antes de ejecutar el código.
- Maneja Errores: Usa
try-catch
para capturar y manejar excepciones comunes. - Documenta Tu Código: Incluye comentarios para describir cada bloque funcional.
Con estos pasos, puedes crear una aplicación robusta y funcional. ¡Buena suerte!