Código Java para Agregar y Buscar Reservas con JDBC: Guía Práctica de DAO y Swing
Gestión de reservas en Java con JDBC
A continuación se presenta el código correspondiente a la capa de acceso a datos (DAO) y la lógica asociada al botón de la interfaz gráfica, encargados de agregar y buscar reservas entre fechas.
1. Método para agregar una reserva
public void agregarReserva(ReservaDto dto) {
try {
// Obtenemos la conexión, llamamos al método de la clase Conexion
Connection conexion = Conexion.getConexion();
// Creamos la query
String query = "INSERT INTO Reserva(codreserva,fecha_inicio,"
+ "fecha_entrega,litros_bencina,cliente_rut) "
+ "VALUES(?,?,?,?,?)";
// Preparamos el enunciado a ejecutar
PreparedStatement agregar = conexion.prepareStatement(query);
// Asignamos los valores a los comodines (?), que se obtienen desde el DTO
agregar.setInt(1, dto.getCodReserva());
/* Para asignar un Date es necesario convertirlo
* de java.util.Date a java.sql.Date */
agregar.setDate(2, new java.sql.Date(dto.getFechaInicio().getTime()));
agregar.setDate(3, new java.sql.Date(dto.getFechaEntrega().getTime()));
agregar.setInt(4, dto.getLitrosBencina());
agregar.setString(5, dto.getClienteRut());
agregar.execute();
conexion.close();
} catch (SQLException w) {
System.out.println("Error SQL al agregar " + w.getMessage());
} catch (Exception e) {
System.out.println("Error al agregar " + e.getMessage());
}
}2. Método para buscar reservas entre fechas
public ArrayList<ReservaDto> buscarEntrefechas(java.util.Date desde, java.util.Date hasta) {
ArrayList<ReservaDto> lista = new ArrayList<ReservaDto>();
ReservaDto dto = null;
try {
// Obtenemos la conexión, llamamos al método de la clase Conexion
Connection conexion = Conexion.getConexion();
// Creamos la query
String query = "select * from reserva where fecha_entrega between ? and ?";
PreparedStatement buscar = conexion.prepareStatement(query);
buscar.setDate(1, new java.sql.Date(desde.getTime()));
buscar.setDate(2, new java.sql.Date(hasta.getTime()));
// Al ejecutar la query obtendremos un ResultSet
ResultSet rs = buscar.executeQuery();
// Recorremos el ResultSet
while (rs.next()) {
dto = new ReservaDto();
dto.setCodReserva(rs.getInt("codreserva"));
dto.setFechaEntrega(rs.getDate("fecha_entrega"));
dto.setFechaInicio(rs.getDate("fecha_inicio"));
dto.setLitrosBencina(rs.getInt("litros_bencina"));
dto.setClienteRut(rs.getString("cliente_rut"));
lista.add(dto);
}
rs.close();
conexion.close();
} catch (SQLException sqle) {
System.out.println("Error SQL al buscar " + sqle.getMessage());
} catch (Exception e) {
System.out.println("Error al buscar " + e.getMessage());
}
return lista;
}3. Lógica del botón en la interfaz gráfica
// Creamos el objeto DTO y lo seteamos con los datos del formulario
ReservaDto dto = new ReservaDto();
dto.setCodReserva(Integer.parseInt(this.txtCodigoReserva.getText().trim()));
dto.setFechaInicio(this.ccalFechaInicio.getDate());
dto.setFechaEntrega(this.ccalFechaEntrega.getDate());
dto.setLitrosBencina(Integer.parseInt(this.txtLitrosBencina.getText().trim()));
dto.setClienteRut(this.txtRutCliente.getText().trim());
// A través del DAO almacenamos la reserva
new ReservaDao().agregarReserva(dto);
// Un simple mensaje de confirmación
javax.swing.JOptionPane.showMessageDialog(this, "¡Registro grabado!");
// Obtenemos las fechas de búsqueda
java.util.Date desde = this.ccaldesde.getDate();
java.util.Date hasta = this.ccalhasta.getDate();
// A través del DAO llamamos al método pasando los parámetros
ArrayList<ReservaDto> lista = new ReservaDao().buscarEntrefechas(desde, hasta);
if (lista.isEmpty()) {
javax.swing.JOptionPane.showMessageDialog(this, "¡No hay registros!");
} else {
// Capturamos el modelo de la tabla
DefaultTableModel model = (DefaultTableModel) this.tbSalida.getModel();
// Limpiamos antes de desplegar
model.setNumRows(0);
// Recorremos el ArrayList: cada objeto será una fila
for (ReservaDto dto : lista) {
Object[] fila = {dto.getCodReserva(), dto.getFechaInicio(), dto.getFechaEntrega(), dto.getLitrosBencina(), dto.getClienteRut()};
// Finalmente agregamos el arreglo al modelo
model.addRow(fila);
}
}