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
.xlsxy 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
trabajadoresy 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-catchpara 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!

