Código Java para Agregar y Buscar Reservas con JDBC: Guía Práctica de DAO y Swing

Informática y Telecomunicaciones4,64 KB

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

Descargar

PDF Word HTML