Voy a poner como lo tengo ahora y la salida que me hace;
public DefaultTableModel mostrarHabitacionesLibres(String fechaInicio, String fechaSalida) {
String sql=""; //Select donde sacaremos las habitaciones que estan en la tablaReservas
// tamaño que va a tener el array de habitaciones libres
//Suponiendo que estan todas libres
String sqlContarHab = "Select count(*) from habitacion";
System.out.println("El sql contar habitaciones vale => " + sqlContarHab);
int [] habitacionesOcupadas = null; // Declaramos el array donde almacenaremos los id de las habitaciones ocupadas
int cantidadHabitaciones = 0; // Variable para almacenar el tamaño del array
DefaultTableModel modelob; //TableModel donde mostraremos las habitaciones libres
Habitacion[] miArray = new Habitacion[10];
//Si la fecha del posible nuevo ingreso es mayor a la fecha de inicio de cualquier reserva
// y al mismo tiempo la fecha de inicio es menor que la fecha de salida de cualquier reserva
// significa que esta en el rango interior de una reserva ya realizado
//de momento esto vale habra q estudiarlo más profundamente
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' ";
System.out.println("El sql para saber que habitaciones estan ocupadas es => " + sql);
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(sqlContarHab); //Sentencia para saber el tamaño, total de habitaciones que tenemos
while (conn.getRs().next()){
cantidadHabitaciones = conn.getRs().getInt(1); //Almacenamos tamaño
}
conn.cerrarConexion();
} catch (SQLException e) {
JOptionPane.showMessageDialog(null, "No se ha podido recuperar los datos desde mostrarHabitacionesLibres." + e);
}
try{
int i = 0;
System.out.println("La cantidad de habitaciones que estan ocupadas son => " +cantidadHabitaciones);
habitacionesOcupadas= new int[cantidadHabitaciones]; //Instanciamos el array con el nuevo tamaño
conn.conecta();
conn.crearSentencia();
conn.ejecutaSQL(sql); //Sql que nos devuelve el id de las habitaciones ocupadas
while (conn.getRs().next()) {
habitacionesOcupadas[i]= conn.getRs().getInt(1); //Almacenamos en el array el id de las habitaciones ocupadas
i++;
System.out.println("El numero de id de las habitaciones ocupadas es => " + habitacionesOcupadas[i]);
}
conn.cerrarConexion();
} catch (SQLException e) {
JOptionPane.showMessageDialog(null, "No se ha podido recuperar los datos desde mostrarHabitacionesLibres." + e);
}
try{
String sqlHabitacionesLibres=""; //Sentencia para mostrar las habitaciones libres
//For donde vamos cambiando el id de las habitaciones ue estaban ocupadas
for (int h = 0; h < habitacionesOcupadas.length; h++) {
System.out.println("La longitud de habitacionesLibres es => " + habitacionesOcupadas.length);
sqlHabitacionesLibres = "Select distinct idhabitacion,numero,piso,descripcion, caracteristicas," +"\n" +
" precio_diario,estado, tipo_habitacion from habitacion where idhabitacion != "+habitacionesOcupadas[h]+" ";
System.out.println("El sqlHabitacionesLibres vale=> " + sqlHabitacionesLibres);
//Variable para crear un objeto
Habitacion obj=null;
int idhabitacion;
String numero;
String piso;
String descripcion;
String caracteristicas;
Double precio;
String estado;
String tipo_habitacion;
conn.conecta();
conn.crearSentencia();
conn.ejecutaSQL(sqlHabitacionesLibres);
while(conn.getRs().next()){
idhabitacion = conn.getRs().getInt(1);
numero = conn.getRs().getString("numero");
piso = conn.getRs().getString("piso");
descripcion = conn.getRs().getString("descripcion");
caracteristicas = conn.getRs().getString("caracteristicas");
precio = Double.parseDouble(conn.getRs().getString("precio_diario"));
estado = conn.getRs().getString("estado");
tipo_habitacion = conn.getRs().getString("tipo_habitacion");
obj = new Habitacion(idhabitacion, numero, piso, descripcion, caracteristicas, precio, estado, tipo_habitacion);
//hay que crear un vector de objetos habitacion
miArray[h]= obj;
System.out.println("" + obj.toString());
}
//Fin del bucle for
}
for(int i=0; i<miArray.length; i++){
registro[0]= String.valueOf(miArray[i].getIdhabitacion());
registro[1] = miArray[i].getNumero();
registro[2] = miArray[i].getPiso();
registro[3] = miArray[i].getDescripcion();
registro[4] = miArray[i].getCaracteristicas();
registro[5] = String.valueOf(miArray[i].getPrecio().toString());
registro[6] = miArray[i].getEstado();
registro[7] = miArray[i].getTipo_habitacion();
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 mostrarHabitacionesLibres." + e);
}
return modelob;
La salida por consola, ya que no se porque el modelo no me lo coje el table, y se repite varias veces por que al haber un for para modificar la select ...
Eso pensaba solucionarlo con antes de meter el objeto en el Array de objetos Habitacion hacer un Compare to por ejemplo con el numero de la habitacion.
FechaInicio vale=>2014-08-01
El sql contar habitaciones vale => Select count(*) from habitacion
El sql para saber que habitaciones estan ocupadas es => Select ha.idhabitacion from reserva re, habitacion ha
where ha.idhabitacion=re.idhabitacion and '2014-08-01' >= re.fecha_ingreso
and '2014-08-01' <= re.fecha_salida and ha.estado='Disponible'
Conectando con la base de datos
Conexión establecida con la Base de datos...
Sentencia creada con éxito.
Conexión cerrada con éxito.
La cantidad de habitaciones que estan ocupadas son => 5
Conectando con la base de datos
Conexión establecida con la Base de datos...
Sentencia creada con éxito.
Conexión cerrada con éxito.
La longitud de habitacionesLibres es => 5
El sqlHabitacionesLibres vale=> Select distinct idhabitacion,numero,piso,descripcion, caracteristicas,
precio_diario,estado, tipo_habitacion from habitacion where idhabitacion != 0
Conectando con la base de datos
Conexión establecida con la Base de datos...
Sentencia creada con éxito.
El idhabitacion es; 1
el numero de la habitacion es; 1
el piso es; 1
la descripcion es; fff
las caracteristicas son; ffff
el precio es; 100.0
su estado es; Disponible
el tipo de habitacion es; ffff
El idhabitacion es; 2
el numero de la habitacion es; 2
el piso es; 1
la descripcion es; con nevera
las caracteristicas son; interior
el precio es; 20.0
su estado es; Disponible
el tipo de habitacion es; Individual
El idhabitacion es; 3
el numero de la habitacion es; 3
el piso es; 1
la descripcion es; dddd
las caracteristicas son; ddddd
el precio es; 200.0
su estado es; Disponible
el tipo de habitacion es; ddddd
El idhabitacion es; 4
el numero de la habitacion es; 4
el piso es; 1
la descripcion es; edeee
las caracteristicas son; eeeee
el precio es; 300.0
su estado es; Disponible
el tipo de habitacion es; eeeee
El idhabitacion es; 5
el numero de la habitacion es; 10
el piso es; 3
la descripcion es; Matrimonio
las caracteristicas son; exterior
el precio es; 200.0
su estado es; Disponible
el tipo de habitacion es; exterior
La longitud de habitacionesLibres es => 5
El sqlHabitacionesLibres vale=> Select distinct idhabitacion,numero,piso,descripcion, caracteristicas,
precio_diario,estado, tipo_habitacion from habitacion where idhabitacion != 0
Conectando con la base de datos
Conexión establecida con la Base de datos...
Sentencia creada con éxito.
El idhabitacion es; 1
el numero de la habitacion es; 1
el piso es; 1
la descripcion es; fff
las caracteristicas son; ffff
el precio es; 100.0
su estado es; Disponible
el tipo de habitacion es; ffff
El idhabitacion es; 2
el numero de la habitacion es; 2
el piso es; 1
la descripcion es; con nevera
las caracteristicas son; interior
el precio es; 20.0
su estado es; Disponible
el tipo de habitacion es; Individual
El idhabitacion es; 3
el numero de la habitacion es; 3
el piso es; 1
la descripcion es; dddd
las caracteristicas son; ddddd
el precio es; 200.0
su estado es; Disponible
el tipo de habitacion es; ddddd
El idhabitacion es; 4
el numero de la habitacion es; 4
el piso es; 1
la descripcion es; edeee
las caracteristicas son; eeeee
el precio es; 300.0
su estado es; Disponible
el tipo de habitacion es; eeeee
El idhabitacion es; 5
el numero de la habitacion es; 10
el piso es; 3
la descripcion es; Matrimonio
las caracteristicas son; exterior
el precio es; 200.0
su estado es; Disponible
el tipo de habitacion es; exterior
La longitud de habitacionesLibres es => 5
El sqlHabitacionesLibres vale=> Select distinct idhabitacion,numero,piso,descripcion, caracteristicas,
precio_diario,estado, tipo_habitacion from habitacion where idhabitacion != 0
Conectando con la base de datos
Conexión establecida con la Base de datos...
Sentencia creada con éxito.
El idhabitacion es; 1
el numero de la habitacion es; 1
el piso es; 1
la descripcion es; fff
las caracteristicas son; ffff
el precio es; 100.0
su estado es; Disponible
el tipo de habitacion es; ffff
El idhabitacion es; 2
el numero de la habitacion es; 2
el piso es; 1
la descripcion es; con nevera
las caracteristicas son; interior
el precio es; 20.0
su estado es; Disponible
el tipo de habitacion es; Individual
El idhabitacion es; 3
el numero de la habitacion es; 3
el piso es; 1
la descripcion es; dddd
las caracteristicas son; ddddd
el precio es; 200.0
su estado es; Disponible
el tipo de habitacion es; ddddd
El idhabitacion es; 4
el numero de la habitacion es; 4
el piso es; 1
la descripcion es; edeee
las caracteristicas son; eeeee
el precio es; 300.0
su estado es; Disponible
el tipo de habitacion es; eeeee
El idhabitacion es; 5
el numero de la habitacion es; 10
el piso es; 3
la descripcion es; Matrimonio
las caracteristicas son; exterior
el precio es; 200.0
su estado es; Disponible
el tipo de habitacion es; exterior
La longitud de habitacionesLibres es => 5
El sqlHabitacionesLibres vale=> Select distinct idhabitacion,numero,piso,descripcion, caracteristicas,
precio_diario,estado, tipo_habitacion from habitacion where idhabitacion != 0
Conectando con la base de datos
Conexión establecida con la Base de datos...
Sentencia creada con éxito.
El idhabitacion es; 1
el numero de la habitacion es; 1
el piso es; 1
la descripcion es; fff
las caracteristicas son; ffff
el precio es; 100.0
su estado es; Disponible
el tipo de habitacion es; ffff
El idhabitacion es; 2
el numero de la habitacion es; 2
el piso es; 1
la descripcion es; con nevera
las caracteristicas son; interior
el precio es; 20.0
su estado es; Disponible
el tipo de habitacion es; Individual
El idhabitacion es; 3
el numero de la habitacion es; 3
el piso es; 1
la descripcion es; dddd
las caracteristicas son; ddddd
el precio es; 200.0
su estado es; Disponible
el tipo de habitacion es; ddddd
El idhabitacion es; 4
el numero de la habitacion es; 4
el piso es; 1
la descripcion es; edeee
las caracteristicas son; eeeee
el precio es; 300.0
su estado es; Disponible
el tipo de habitacion es; eeeee
El idhabitacion es; 5
el numero de la habitacion es; 10
el piso es; 3
la descripcion es; Matrimonio
las caracteristicas son; exterior
el precio es; 200.0
su estado es; Disponible
el tipo de habitacion es; exterior
La longitud de habitacionesLibres es => 5
El sqlHabitacionesLibres vale=> Select distinct idhabitacion,numero,piso,descripcion, caracteristicas,
precio_diario,estado, tipo_habitacion from habitacion where idhabitacion != 0
Conectando con la base de datos
Conexión establecida con la Base de datos...
Sentencia creada con éxito.
El idhabitacion es; 1
el numero de la habitacion es; 1
el piso es; 1
la descripcion es; fff
las caracteristicas son; ffff
el precio es; 100.0
su estado es; Disponible
el tipo de habitacion es; ffff
El idhabitacion es; 2
el numero de la habitacion es; 2
el piso es; 1
la descripcion es; con nevera
las caracteristicas son; interior
el precio es; 20.0
su estado es; Disponible
el tipo de habitacion es; Individual
El idhabitacion es; 3
el numero de la habitacion es; 3
el piso es; 1
la descripcion es; dddd
las caracteristicas son; ddddd
el precio es; 200.0
su estado es; Disponible
el tipo de habitacion es; ddddd
El idhabitacion es; 4
el numero de la habitacion es; 4
el piso es; 1
la descripcion es; edeee
las caracteristicas son; eeeee
el precio es; 300.0
su estado es; Disponible
el tipo de habitacion es; eeeee
El idhabitacion es; 5
el numero de la habitacion es; 10
el piso es; 3
la descripcion es; Matrimonio
las caracteristicas son; exterior
el precio es; 200.0
su estado es; Disponible
el tipo de habitacion es; exterior
el total registros es 1
el total registros es 2
el total registros es 3
el total registros es 4
el total registros es 5