Hola Dogo, gracias por el interes que estas mostrando, te lo agradezco. He visto el método con la select y parece que va funcionar, pero mi poblema es que no se que hacer con ese Array de habitaciones disponibles.
Vamos para que quede claro, si me devuelve 2id de habitaciones libres 1,5,20, 30" no se luego como hacer para seleccionar esas id de la tabla habitaciones. "Hay que pensar que esas id van a ir cambiando, son dinamicas". Ese era mi problema de un principio más que el saber que habitaciones eran las que estaban libres.
Mira te pongo la clase como la tengo yo, al final esta el método que debe devolver el modelo con Table de las habitaciones disponibles;
mport Datos.Habitacion;
import Datos.Reservas;
import Presentacion.frmEscritorio;
import java.awt.HeadlessException;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import javax.swing.JOptionPane;
import javax.swing.table.DefaultTableModel;
/**
*
* @author carlos
*/
public class LReservas {
Conexion conn = new Conexion();
Reservas obj;
public int totalRegistro = 0;
/**
* Metodo para buscar en el table model
*
* @param buscar Recibe un String para ser ejecutado en el MySql
* @return Devuelve un TableModel
*/
public DefaultTableModel mostrar(String buscar) {
String sql="";
DefaultTableModel modelob;
//Podemos usar el metodo varias veces con like %variable%
sql = "Select r.idreserva,r.idhabitacion,h.numero,r.idcliente," +
"(select nombre from persona where idpersona=r.idcliente) as Ncliente," +
"(select apaterno from persona where idpersona=r.idcliente) as Acliente," +
"r.idtrabajador, (select nombre from persona where idpersona =r.idtrabajador)as Ntrabajador," +
"(select apaterno from persona where idpersona=r.idtrabajador) as Atrabajador," +
"r.tipo_reserva, r.fecha_reserva,r.fecha_ingreso,r.fecha_salida,"+
"r.costo_alojamiento,r.observacion, r.estado from reserva r inner join habitacion h on h.idhabitacion=r.idhabitacion" +
" where r.idreserva like '%"+buscar+"%' order by r.idreserva desc";
System.out.println("El sql en mostrar en Reservas vale ===>>>" + sql);
String[] titulos = {"ID", "Id Habitación", "Número", "Id Cliente", "Cliente", "Id Trabajador", "Trabajador", "Tipo Reserva", "Fecha Reserva", "Fecha Ingreso", "Fecha Salida", "Total", "Observaciones", "Estado" };
String[] registro = new String [14];
modelob = new DefaultTableModel(null, titulos);
try{
conn.conecta();
conn.crearSentencia();
conn.ejecutaSQL(sql);
while (conn.getRs().next()) {
registro[0] = conn.getRs().getString("idreserva");
registro[1] = conn.getRs().getString("idhabitacion");
registro[2] = conn.getRs().getString("numero");
registro[3] = conn.getRs().getString("idcliente");
registro[4] = conn.getRs().getString("Ncliente")+ " " + conn.getRs().getString("Acliente");
registro[5] = conn.getRs().getString("idtrabajador");
registro[6] = conn.getRs().getString("Ntrabajador") + " " + conn.getRs().getString("Atrabajador");
registro[7] = conn.getRs().getString("tipo_reserva");
registro[8] = conn.getRs().getString("fecha_reserva");
registro[9] = conn.getRs().getString("fecha_ingreso");
registro[10] = conn.getRs().getString("fecha_salida");
registro[11] = conn.getRs().getString("costo_alojamiento");
registro[12] = conn.getRs().getString("observacion");
registro[13] = conn.getRs().getString("estado");
totalRegistro = totalRegistro + 1;
System.out.println("el total registros es " +totalRegistro);
modelob.addRow(registro);
}
conn.cerrarConexion();
} catch (SQLException e) {
JOptionPane.showMessageDialog(null, "No se ha podido recuperar los datos desde mostrar." + e);
}
return modelob;
}
/**
* Funcion insertar habitacion en la bbdd.
*
* @param obj recive un objeto de habitacion
* @return devuelve el número de filas al realizar la operación
*
*/
public int insertar(Reservas obj) {
//SQL para persona
String sql = "insert into reserva (idhabitacion,idcliente, idtrabajador,tipo_reserva, fecha_reserva, fecha_ingreso, fecha_salida, costo_alojamiento, observacion, estado)"
+ " values ("+ obj.getIdhabitacion() + "," + obj.getIdcliente() + "," + obj.getIdtrabajador() + ",'" + obj.getTipoReserva() + "','" + obj.getfReserva() + "','" + obj.getfIngreso() + "','"
+ obj.getfSalida() + "'," + obj.getTotal() + ",'" + obj.getObservacion() + "','" + obj.getEstado()+ "' )";
System.out.println("La sql insertar en RESERVAS vale => " +sql);
int resultado = -1;
try {
conn.conecta();
conn.crearSentencia();
resultado = conn.updateSQL(sql); //Intentamos ingresar a la persona
if (resultado >= 0) {
JOptionPane.showMessageDialog(null, "La reserva ha sido ingresada con exicto.");
} else {
JOptionPane.showMessageDialog(null, "La reserva no se ha ha podido ser ingresada.");
}
conn.cerrarConexion();
} catch (HeadlessException | SQLException e) {
JOptionPane.showMessageDialog(null, "Error: " + e);
}
return resultado;
}
/**
* Metodo para actualizar la bbdd
*
* @return Un entero para saber el numero de filas afectadas
* @param obj Recibe objeto de habitacion
*/
public int actualizar(Reservas obj) {
String sql = "Update reserva set idhabitacion=" + obj.getIdhabitacion() + ",idcliente=" + obj.getIdcliente() + ",idtrabajador=" + obj.getIdtrabajador() + ",tipo_reserva='"
+ obj.getTipoReserva() + "', fecha_reserva='" + obj.getfReserva() + "',fecha_ingreso='" + obj.getfIngreso() + "',fecha_salida='"
+ obj.getfSalida() + "',costo_alojamiento=" + obj.getTotal() + ",observacion='"+obj.getObservacion()+"',estado='"+obj.getEstado()+"' where idreserva=" + obj.getIdreserva() + "";
int resultado = -1;
System.out.println("sql actualizar una RESERVA=> " + sql);
try {
conn.conecta();
conn.crearSentencia();
resultado = conn.updateSQL(sql);
if (resultado >= 0) {
JOptionPane.showMessageDialog(null, "La reserva se ha actualizado correctament.");
} else {
JOptionPane.showMessageDialog(null, "La reserva no ha podido ser actualiza.");
}
conn.cerrarConexion();
} catch (SQLException e) {
JOptionPane.showMessageDialog(null, "El error al actualizar ha sido, " + e);
}
return resultado;
}
/**
* Metodo para eliminar habitaciones de la bbdd
*
* @param id Recibe el id de la habitación para ser eliminada
* @return Devuelve el número de filas afectadas
*/
public int eliminar(int id) {
String sqlT = "Delete from reserva where idreserva =" + id + "";
System.out.println("sql al eliminar Reserva => " + sqlT);
int resultado = -1;
try {
conn.conecta();
conn.crearSentencia();
resultado = conn.updateSQL(sqlT);
if (resultado >= 0) {
JOptionPane.showMessageDialog(null, "La reserva ha sido eliminadoa correctamente.");
} else {
JOptionPane.showMessageDialog(null, "No hemos podido eliminar el la reserva.");
}
conn.cerrarConexion();
} catch (SQLException e) {
JOptionPane.showMessageDialog(null, "Hemos tenido un problema al eliminar la habitación, " + e);
}
return resultado;
}
/**
* Metodo para buscar en el table model
*las habitaciones disponibles en las fechas indicadas
* @param fechaInicio
* @param fechaSalida
* @param buscar Recibe un String para ser ejecutado en el MySql
* @return Devuelve un TableModel
*/
public DefaultTableModel mostrarHabitacionesLibres(String fechaInicio, String fechaSalida) {
String sql="";
// SQL saber habitaciones ocupadas
sql ="Select ha.idhabitacion from reserva re, habitacion ha " +"\n" +
" where ha.idhabitacion=re.idhabitacion and '"+fechaInicio+"' >= re.fecha_ingreso \n" +
"and '"+fechaInicio+"' <= re.fecha_salida and ha.estado='Disponible' ";
DefaultTableModel modelob = null;
String[] titulos = {"ID", "Numero", "Piso", "Descripcion", "Caracteristicas", "Precio Diario", "Estado", "Tipo de Habitacion"};
String[] registro = new String [8];
modelob = new DefaultTableModel(null,titulos);
try{
conn.conecta();
conn.crearSentencia();
conn.ejecutaSQL(sql); //Sentencia para saber el tamaño, total de habitaciones que tenemos
while (conn.getRs().next()){
}
conn.cerrarConexion();
} catch (SQLException e) {
JOptionPane.showMessageDialog(null, "No se ha podido recuperar los datos desde mostrarHabitacionesLibres." + e);
}
return modelob;
}
///clase
}
Como comento, mi problema es que aunque consiga el array con las habitaciones libres no se como manejarlo.