package accesoDatos;
import java.io.IOException;
import java.sql.Connection;
import java.sql.Date;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.sql.Time;
import java.util.Enumeration;
import java.util.GregorianCalendar;
import java.util.Vector;
import configuracion.Config;
import casarural.Casa;
import casarural.Oferta;
import casarural.Propietario;
import casarural.Recorrido;
import casarural.Servicio;
import excepciones.NoSePuedeReservarException;
// TODO: Auto-generated Javadoc
/**
* The Class GestorBD.
*
* @author kdreamer
*/
public final class GestorBD {
/** The conf. @uml.property name="conf" @uml.associationEnd */
private static Config conf = Config.getInstance();
/** The Constant FUENTE_DATOS. */
public static final String FUENTE_DATOS = conf.getFuenteDatos();
/** The Constant SERVER. */
public static final String SERVER = conf.getServerBD();
/** The Constant PROTOCOLO. */
public static final String PROTOCOLO = conf.getProtocoloBD();
/** The Constant DRIVER. */
public static final String DRIVER = conf.getDriverBD();
/** The Constant SERVERRMI. */
public static final String SERVERRMI= conf.getServerRMI();
//private static final String URL = PROTOCOLO + "://" + SERVER + "/" + FUENTE_DATOS;
/** The Constant URL. */
private static final String URL = PROTOCOLO + ":"+ "//" +SERVER +"/" + FUENTE_DATOS;
/** The Constant USER. */
private static final String USER = conf.getUserBD();
/** The Constant PASS. */
private static final String PASS = conf.getPassBD();
/** The el gestor bd. @uml.property name="elGestorBD" @uml.associationEnd */
private static GestorBD elGestorBD;
/** The c. */
private Connection c;
/** The s. */
private Statement s;
/**
* Constructor.
*
* @throws InstantiationException the instantiation exception
* @throws IllegalAccessException the illegal access exception
* @throws ClassNotFoundException the class not found exception
* @throws SQLException the sQL exception
*/
private GestorBD() throws InstantiationException, IllegalAccessException, ClassNotFoundException, SQLException {
try {
Class.forName(DRIVER).newInstance();
c = DriverManager.getConnection(URL, USER, PASS);
c.setAutoCommit(true);
s = c.createStatement();
} catch (Exception ex) {
System.out
.println("Error realizando la conexion con la base de datos: "
+ FUENTE_DATOS + "\n\t" + ex.toString());
}
}
/**
* Devuelve una instancia del gestor de la BD.
*
* @return GestorBD
* @throws InstantiationException the instantiation exception
* @throws IllegalAccessException the illegal access exception
* @throws ClassNotFoundException the class not found exception
* @throws SQLException the sQL exception
*/
public static GestorBD getInstance() throws InstantiationException, IllegalAccessException, ClassNotFoundException, SQLException {
if (elGestorBD == null)
elGestorBD = new GestorBD();
return elGestorBD;
}
/**
* Selecciona reservas entre las fechas que se le indican.
*
* @param diaIni the dia ini
* @param diaFin the dia fin
* @param numCasa the num casa
* @return Vector de objetos Oferta
* @throws NoSePuedeReservarException the no se puede reservar exception
*/
public Vector seleccionarReservas(java.sql.Date diaIni,
java.sql.Date diaFin, int numCasa)
throws NoSePuedeReservarException
{
Vector vectorReservas = new Vector();
// try{String consulta="SELECT NumOferta,DiaIni,DiaFin,Precio FROM
// Oferta WHERE NumReserva is null AND NumCasa = "+numCasa+" AND DiaFin
// >=#"+diaIni+"# AND DiaIni <= #"+diaFin+"#";
try {
String consulta = "SELECT NumOferta,DiaIni,DiaFin,Precio FROM oferta WHERE NumReserva is null AND NumCasa = "
+ numCasa
+ " AND DiaFin >='"
+ diaIni
+ "' AND DiaIni <= '" + diaFin + "'";
ResultSet rs = s.executeQuery(consulta);
while (rs.next()) {
String numeroOferta = rs.getString("NumOferta");
java.sql.Date diaFinal = rs.getDate("DiaFin");
java.sql.Date diaInicio = rs.getDate("DiaIni");
float precio = rs.getFloat("Precio");
Oferta res = new Oferta();
res.setNumOferta(numeroOferta);
res.setDiaIni(diaInicio);
res.setDiaFin(diaFinal);
res.setPrecio(precio);
vectorReservas.addElement(res);
}
} catch (Exception e) {
e.printStackTrace();
}
if (!(vectorReservas.elements()).hasMoreElements())
throw new NoSePuedeReservarException(
"La casa no se encuentra disponible estos dias");
return vectorReservas;
}
/**
* Dado un numero de casa selecciona al propietario de esa casa.
*
* @param numCasa the num casa
* @return El propietario
*/
public Propietario seleccionarPropietario(int numCasa)
{
Propietario p = new Propietario();
try {
// String consulta = "SELECT P.NumCuentaCorriente FROM Propietario
// P, CasaRural C WHERE C.Propietario=P.CuentaSistema AND C.NumCasa
// ="+numCasa;
String consulta = "SELECT P.NumCuentaCorriente FROM propietario P, casarural C WHERE C.Propietario=P.CuentaSistema AND C.NumCasa ="
+ numCasa;
ResultSet rs = s.executeQuery(consulta);
if (rs.next()) {
String str = new String(rs.getString("NumCuentaCorriente"));
p.setNumCuentaCorriente(str);
}
} catch (Exception ex) {
System.out.println(ex.toString());
}
return p;
}
/**
* Devuelve las casas dado un numero de cuenta de propietario.
*
* @param cuentaSistema the cuenta sistema
* @return Vector de objetos de la clase Casa
*/
public Vector seleccionarCasas(String cuentaSistema)
{
Vector vectorCasas = new Vector();
try {
// String consulta="SELECT NumCasa FROM CasaRural WHERE
// Propietario='"+cuentaSistema+"'";
String consulta = "SELECT NumCasa FROM casarural WHERE Propietario='"
+ cuentaSistema + "'";
ResultSet rs = s.executeQuery(consulta);
while (rs.next()) {
int nc = rs.getInt("NumCasa");
Casa ca = new Casa();
ca.setNumCasa(nc);
vectorCasas.addElement(ca);
}
} catch (Exception ex) {
System.out.println(ex.toString());
}
return vectorCasas;
}
/**
* Devuelve todas las casas.
*
* @return Vector de objetos de la clase Casa
*/
public Vector seleccionarCasas()
{
Vector vectorCasas = new Vector();
try {
// String consulta="SELECT NumCasa FROM CasaRural";
String consulta = "SELECT NumCasa FROM casarural";
ResultSet rs = s.executeQuery(consulta);
while (rs.next()) {
int nc = rs.getInt("NumCasa");
Casa ca = new Casa();
ca.setNumCasa(nc);
vectorCasas.addElement(ca);
}
} catch (Exception ex) {
System.out.println(ex.toString());
}
return vectorCasas;
}
/**
* Devuelve el resultado de las ofertas que interesan, según las
* restricciones de fechas, precio y demás, que opcionalmente pueda haber
* introducido.
*
* Para la realización de la consulta, se ha decidido generarla a medida
* que se descubren los parámetros introducidos por el usuario. De esta
* manera, puede capturarse cualquiera de las posibilidades introducidas por
* el usuario, de una vez en una sola consulta.
*
* @param numDormitorios the num dormitorios
* @param numBanos the num banos
* @param diaIni the dia ini
* @param diaFin the dia fin
* @param precio the precio
* @param numMinDias the num min dias
* @param orden the orden
* @return Vector, un vector con las ofertas interesantes para el usuario.
*/
public Vector seleccionarCasasDorWC(int numDormitorios, int numBanos,
java.sql.Date diaIni, java.sql.Date diaFin, float precio,
int numMinDias, boolean orden)
{
String banos = "";
String dormi = "";
String dias = "";
String sOrden = "";
String precioMax = "";
/*
* En caso de que el usuario haya añadido algún número mínimo de
* dormitorios, dicha restricción se añade a la consulta. Para ello,
* creamos la restricción.
*/
if (numDormitorios != 0) {
dormi = " AND NumDormitorios >= " + numDormitorios;
}
// float Fdias = ((diaFin.getTime() - diaIni.getTime())/(1000*3600*24));
// int numDias = (int) Fdias;
/*
* En caso de que el usuario haya añadido algún número mínimo de
* baños, dicha restricción se añade a la consulta. Para ello,
* creamos la restricción.
*/
if (numBanos != 0) {
banos = " AND NumBaños >=" + numBanos;
}
/*
* En caso de que el usuario haya añadido un precio máximo, dicha
* restricción se añade a la consulta. Para ello, creamos la
* restricción.
*/
if (precio != 0) {
precioMax = " AND Precio <=" + precio;
}
/*
* Se calcula el número de días, para comparar la duración de la
* estancia dentro de la misma consulta.
*/
if (numMinDias != 0) {
dias = " AND ((DiaFin - DiaIni)/1000000) >=" + numMinDias;
}
/*
* En función de lo que escoja el usuario, se ordenará el resultado de
* la consulta.
*/
if (orden) {
sOrden = " ORDER BY Precio ASC";
} else {
sOrden = " ORDER BY numDias DESC";
}
// precio,diafin,diaini,numcasa,numoferta
String consulta = "SELECT *, ((DiaFin - DiaIni)/1000000) as numDias FROM casarural "
+ " natural join oferta WHERE numreserva is null "
+ banos
+ dormi
+ " AND DiaIni >= '"
+ diaIni
+ "' AND Diafin <= '"
+ diaFin + "' " + precioMax + dias;
Vector ofertas = new Vector();
// Creamos la consulta resultante de la unión de todas las piezas.
try {
consulta = consulta + sOrden;
System.out.println(consulta);
ResultSet rs = s.executeQuery(consulta);
// Se crea la oferta resultado, y se pasa al vector de ofertas.
while (rs.next()) {
Oferta of = new Oferta();
of.setPrecio(rs.getFloat("precio"));
of.setDiaFin(rs.getDate("diafin"));
of.setDiaIni(rs.getDate("diaini"));
of.setNumCasa(rs.getInt("NumCasa"));
Integer i = new Integer(rs.getInt("Numoferta"));
of.setNumOferta(i.toString());
ofertas.add(of);
}
} catch (Exception ex) {
System.out.println(ex.toString());
}
return ofertas;
}
/**
* Fecha devuelve una fecha tomada de formato tres datos en formato
* numérico.
*
* @param year the year
* @param month the month
* @param day the day
* @return Date, la misma fecha en formato fecha (clase Date).
*/
private static java.sql.Date fecha(int year, int month, int day) {
return new java.sql.Date((new GregorianCalendar(year, month - 1, day))
.getTime().getTime());
}
/**
* Selecciona las ofertas entre las fechas dadas para un numero de casa.
*
* @param diaIni the dia ini
* @param diaFin the dia fin
* @param numCasa the num casa
* @return Vector de objetos de la clase Oferta
*/
public Vector seleccionarOfertas(java.sql.Date diaIni,
java.sql.Date diaFin, int numCasa)
{
Vector vectorOfertas = new Vector();
try {
// String consulta ="SELECT
// NumOferta,DiaIni,DiaFin,Precio,NumReserva FROM OFERTA WHERE
// DiaFin >=#"+diaIni+"# AND DiaIni <= #"+diaFin+"# AND NumCasa =
// "+numCasa;
// String consulta ="SELECT
// NumOferta,DiaIni,DiaFin,Precio,NumReserva FROM OFERTA WHERE
// DiaFin >=#"+diaFin+"# AND DiaIni <= #"+diaIni+"# AND DiaFin
// >=#"+diaIni+"# AND DiaIni <= #"+diaFin+"# AND NumCasa =
// "+numCasa;
// String consulta ="SELECT
// NumOferta,DiaIni,DiaFin,Precio,NumReserva FROM OFERTA WHERE
// DiaFin =#"+diaFin+"# AND DiaIni = #"+diaIni+"# AND NumCasa =
// "+numCasa;
String consulta = "SELECT NumOferta,DiaIni,DiaFin,Precio,NumReserva FROM oferta WHERE DiaFin >='"
+ diaFin
+ "' AND DiaIni <= '"
+ diaIni
+ "' AND DiaFin >='"
+ diaIni
+ "' AND DiaIni <= '"
+ diaFin + "' AND NumCasa = " + numCasa;
ResultSet rs = s.executeQuery(consulta);
while (rs.next()) {
String nOferta = rs.getString("NumOferta");
java.sql.Date dIni = rs.getDate("DiaIni");
java.sql.Date dFin = rs.getDate("DiaFin");
float pr = rs.getFloat("Precio");
String nRes = rs.getString("NumReserva");
Oferta of = new Oferta();
of.setDiaFin(dFin);
of.setDiaIni(dIni);
of.setNumOferta(nOferta);
of.setNumReserva(nRes);
of.setPrecio(pr);
vectorOfertas.addElement(of);
}
} catch (Exception ex) {
System.out.println(ex.toString());
}
return vectorOfertas;
}
////////////////////////////////////
/**
* Realiza la reserva en forma de transaccion.
*
* @param reservasTotales the reservas totales
* @param numReserva the num reserva
* @param numTfnoReserva the num tfno reserva
* @param precioTotal the precio total
* @return Ninguno
*/
public void transaccionDeReserva(Vector reservasTotales, String numReserva,
String numTfnoReserva, float precioTotal) {
try {
// Connection
// d=DriverManager.getConnection("jdbc:odbc:BDCasasRurales");
//Connection d = DriverManager.getConnection(URL, USER, PASS);
c.setAutoCommit(false);
Statement f = c.createStatement();
java.sql.Date diadehoy = new java.sql.Date(System
.currentTimeMillis());
// String consulta1 ="INSERT INTO
// RESERVA(NumReserva,Pagado,Fecha,NumTfno,PrecioTotal) VALUES
// ('"+numReserva+"',no,#"+diadehoy+"#,'"+numTfnoReserva+"',"+precioTotal+")";
String consulta1 = "INSERT INTO reserva(NumReserva,Pagado,Fecha,NumTfno,PrecioTotal) VALUES ('"
+ numReserva
+ "',no,'"
+ diadehoy
+ "','"
+ numTfnoReserva
+ "'," + precioTotal + ")";
f.executeUpdate(consulta1);
Enumeration enumera = reservasTotales.elements();
while (enumera.hasMoreElements()) {
String nOferta = (String) enumera.nextElement();
// String consulta = "UPDATE OFERTA SET NumReserva
// ='"+numReserva+"' WHERE NumOferta
// ="+Integer.valueOf(nOferta).intValue();
String consulta = "UPDATE oferta SET NumReserva ='"
+ numReserva + "' WHERE NumOferta ="
+ Integer.valueOf(nOferta).intValue();
s.executeUpdate(consulta);
}
c.commit();
c.close();
} catch (Exception ex) {
System.out.println(ex.toString());
}
}
/**
* Realiza una trasaccion de ofertas.
*
* @param todasLasOfertasIncluidas the todas las ofertas incluidas
* @param diaIni the dia ini
* @param diaFin the dia fin
* @param numOfePrimera the num ofe primera
* @param numOfeUltima the num ofe ultima
* @param precio the precio
* @param numCasa the num casa
* @return Ninguno
*/
public void transaccionDeOfertas(Vector todasLasOfertasIncluidas,
java.sql.Date diaIni, java.sql.Date diaFin, String numOfePrimera,
String numOfeUltima, float precio, int numCasa) {
try {
// Connection
// d=DriverManager.getConnection("jdbc:odbc:BDCasasRurales");
// Connection d = DriverManager.getConnection(URL, USER, PASS);
c.setAutoCommit(false);
Statement f = c.createStatement();
String consulta;
Enumeration enumera = todasLasOfertasIncluidas.elements();
if (!numOfePrimera.equals(numOfeUltima)) {
if (!numOfePrimera.equals("cero")) {
// String consulta1="SELECT Precio,DiaIni,DiaFin FROM OFERTA
// WHERE
// NumOferta="+Integer.valueOf(numOfePrimera).intValue();
String consulta1 = "SELECT Precio,DiaIni,DiaFin FROM oferta WHERE NumOferta="
+ Integer.valueOf(numOfePrimera).intValue();
ResultSet rs1 = f.executeQuery(consulta1);
rs1.next();
float prPrim = rs1.getFloat("Precio");
java.sql.Date dIniPrim = rs1.getDate("DiaIni");
java.sql.Date dFinPrim = rs1.getDate("DiaFin");
int numeroDiasPrim = (int) ((dFinPrim.getTime() - dIniPrim
.getTime()) / (1000 * 3600 * 24)) + 1;
float precioPorDiaPrim = prPrim / (int) numeroDiasPrim;
int numDiasAntes = (int) ((diaIni.getTime() - dIniPrim
.getTime()) / (1000 * 3600 * 24));
int nuevoPrecioPrim = (int) (numDiasAntes * precioPorDiaPrim);
java.sql.Date diaIniNuevo = new java.sql.Date(diaIni
.getTime() - 1000 * 3600 * 24);
if (diaIniNuevo.getTime() >= dIniPrim.getTime()) {
// String consultaA1 = "UPDATE OFERTA SET DiaFin =
// #"+diaIniNuevo+"#, Precio = "+nuevoPrecioPrim+" WHERE
// NumOferta
// ="+Integer.valueOf(numOfePrimera).intValue();
String consultaA1 = "UPDATE oferta SET DiaFin = '"
+ diaIniNuevo + "', Precio = "
+ nuevoPrecioPrim + " WHERE NumOferta ="
+ Integer.valueOf(numOfePrimera).intValue();
f.executeUpdate(consultaA1);
} else {
// String consultaA3 = "DELETE FROM OFERTA WHERE
// NumOferta
// ="+Integer.valueOf(numOfePrimera).intValue();
String consultaA3 = "DELETE FROM oferta WHERE NumOferta ="
+ Integer.valueOf(numOfePrimera).intValue();
f.executeUpdate(consultaA3);
}
}
if (!numOfeUltima.equals("cero")) {
// String consulta2="SELECT Precio,DiaIni,DiaFin FROM OFERTA
// WHERE
// NumOferta="+Integer.valueOf(numOfeUltima).intValue();
String consulta2 = "SELECT Precio,DiaIni,DiaFin FROM oferta WHERE NumOferta="
+ Integer.valueOf(numOfeUltima).intValue();
ResultSet rs2 = f.executeQuery(consulta2);
rs2.next();
float prUlti = rs2.getFloat("Precio");
java.sql.Date dIniUlti = rs2.getDate("DiaIni");
java.sql.Date dFinUlti = rs2.getDate("DiaFin");
int numeroDiasUlti = (int) ((dFinUlti.getTime() - dIniUlti
.getTime()) / (1000 * 3600 * 24)) + 1;
float precioPorDiaUlti = prUlti / (int) numeroDiasUlti;
int numDiasDespues = (int) ((dFinUlti.getTime() - diaFin
.getTime()) / (1000 * 3600 * 24));
int nuevoPrecioUlti = (int) (numDiasDespues * precioPorDiaUlti);
java.sql.Date diaFinNuevo = new java.sql.Date(diaFin
.getTime() + 1000 * 3600 * 24);
if (dFinUlti.getTime() >= diaFinNuevo.getTime()) {
// String consultaA2 = "UPDATE OFERTA SET DiaIni =
// #"+diaFinNuevo+"#, Precio = '"+nuevoPrecioUlti+"'
// WHERE NumOferta
// ="+Integer.valueOf(numOfeUltima).intValue();
String consultaA2 = "UPDATE oferta SET DiaIni = '"
+ diaFinNuevo + "', Precio = '"
+ nuevoPrecioUlti + "' WHERE NumOferta ="
+ Integer.valueOf(numOfeUltima).intValue();
f.executeUpdate(consultaA2);
} else {
// String consultaA4 = "DELETE FROM OFERTA WHERE
// NumOferta
// ="+Integer.valueOf(numOfeUltima).intValue();
String consultaA4 = "DELETE FROM oferta WHERE NumOferta ="
+ Integer.valueOf(numOfeUltima).intValue();
f.executeUpdate(consultaA4);
}
}
} else if (!numOfePrimera.equals("cero")) {
// String consulta1="SELECT Precio,DiaIni,DiaFin FROM OFERTA
// WHERE NumOferta="+Integer.valueOf(numOfePrimera).intValue();
String consulta1 = "SELECT Precio,DiaIni,DiaFin FROM oferta WHERE NumOferta="
+ Integer.valueOf(numOfePrimera).intValue();
ResultSet rs1 = f.executeQuery(consulta1);
rs1.next();
float prPrim = rs1.getFloat("Precio");
java.sql.Date dIniPrim = rs1.getDate("DiaIni");
java.sql.Date dFinPrim = rs1.getDate("DiaFin");
int numeroDiasPrim = (int) ((dFinPrim.getTime() - dIniPrim
.getTime()) / (1000 * 3600 * 24)) + 1;
float precioPorDiaPrim = prPrim / (int) numeroDiasPrim;
int numDiasAntes = (int) ((diaIni.getTime() - dIniPrim
.getTime()) / (1000 * 3600 * 24));
int numDiasDespues = (int) ((dFinPrim.getTime() - diaFin
.getTime()) / (1000 * 3600 * 24));
int nuevoPrecioPrim = (int) (numDiasAntes * precioPorDiaPrim);
int nuevoPrecioUlti = (int) (numDiasDespues * precioPorDiaPrim);
java.sql.Date diaIniNuevo = new java.sql.Date(
diaIni.getTime() - 1000 * 3600 * 24);
java.sql.Date diaFinNuevo = new java.sql.Date(
diaFin.getTime() + 1000 * 3600 * 24);
if (diaIniNuevo.getTime() >= dIniPrim.getTime()) {
// String consultaA5 = "UPDATE OFERTA SET DiaFin =
// #"+diaIniNuevo+"#, Precio = "+nuevoPrecioPrim+" WHERE
// NumOferta ="+Integer.valueOf(numOfePrimera).intValue();
String consultaA5 = "UPDATE oferta SET DiaFin = '"
+ diaIniNuevo + "', Precio = " + nuevoPrecioPrim
+ " WHERE NumOferta ="
+ Integer.valueOf(numOfePrimera).intValue();
f.executeUpdate(consultaA5);
} else {
// String consultaA6 = "DELETE FROM OFERTA WHERE NumOferta
// ="+Integer.valueOf(numOfePrimera).intValue();
String consultaA6 = "DELETE FROM oferta WHERE NumOferta ="
+ Integer.valueOf(numOfePrimera).intValue();
f.executeUpdate(consultaA6);
}
if (dFinPrim.getTime() >= diaFinNuevo.getTime()) {
// String consulta2="INSERT INTO OFERTA
// (DiaIni,DiaFin,Precio,NumCasa)"+"VALUES(#"+diaFinNuevo+"#,#"+dFinPrim+"#,"+nuevoPrecioUlti+","+numCasa+")";
String consulta2 = "INSERT INTO oferta (DiaIni,DiaFin,Precio,NumCasa)"
+ "VALUES('"
+ diaFinNuevo
+ "','"
+ dFinPrim
+ "'," + nuevoPrecioUlti + "," + numCasa + ")";
f.executeUpdate(consulta2);
}
}
String nOferta;
while (enumera.hasMoreElements()) {
nOferta = (String) enumera.nextElement();
// consulta = "DELETE FROM OFERTA WHERE NumOferta
// ="+Integer.valueOf(nOferta).intValue();
consulta = "DELETE FROM oferta WHERE NumOferta ="
+ Integer.valueOf(nOferta).intValue();
f.executeUpdate(consulta);
}
// String consultaI1 = "INSERT INTO OFERTA
// (DiaIni,DiaFin,Precio,NumCasa)"+"VALUES(#"+diaIni+"#,#"+diaFin+"#,"+precio+","+numCasa+")";
String consultaI1 = "INSERT INTO oferta (DiaIni,DiaFin,Precio,NumCasa)"
+ "VALUES('"
+ diaIni
+ "','"
+ diaFin
+ "',"
+ precio
+ "," + numCasa + ")";
f.executeUpdate(consultaI1);
c.commit();
//.close();
} catch (Exception ex) {
System.out.println(ex.toString());
ex.printStackTrace();
}
}
/**
* Método que obtiene el número de habitaciones y de baños dado el id de
* la casa.
*
* @param numCasa the num casa
* @return vector que contiene por un lado, el número de habitaciones, y
* por el otro el número de baños de dicha casa
*/
public Vector numHabitacionesnumBanos(int numCasa) {
Vector v = new Vector();
try {// String consulta="SELECT numDormitorios,numBa�os FROM
// CasaRural WHERE numCasa="+numCasa;
String consulta = "SELECT numDormitorios,numBaños FROM casarural WHERE numCasa="
+ numCasa;
ResultSet rs = s.executeQuery(consulta);
if (rs.next()) {
int dormitorios = rs.getInt(1);
int banos = rs.getInt(2);
v.addElement(String.valueOf(dormitorios));
v.addElement(String.valueOf(banos));
}
} catch (Exception ex) {
System.out
.println("error al contar habitaciones y baños(GestorBD)");
}
;
return v;
}
/**
* Método que obtiene el número de camas de una casa. Las camas dobles
* cuentan por dos. El método devolverá un único número con el total de
* camas de dicha casa.
*
* @param numCasa the num casa
* @return el número de camas de la casa
*/
public int camas(int numCasa) {
int numcamas = 0;
try
//
{// String consulta="SELECT
// SUM(NumCamasSencillas)+SUM(NumCamasDobles)*2 as tamano FROM
// Dormitorio WHERE NumCasa="+numCasa+" GROUP BY NumCasa";
String consulta = "SELECT SUM(NumCamasSencillas)+SUM(NumCamasDobles)*2 as tamano FROM dormitorio WHERE NumCasa="
+ numCasa + " GROUP BY NumCasa";
ResultSet rs = s.executeQuery(consulta);
if (rs.next())
numcamas = rs.getInt(1);
} catch (Exception ex) {
System.out.println("error en camas (GestorBD)");
}
;
return numcamas;
}
/**
* Metodo que devuelve el dia de la primera oferta de la reserva que se le pasa por parametro.
*
* @param numReserva the num reserva
* @return GregorianCalendar,
* fecha de la primera oferta de la reserva pasada por parametro
* @throws SQLException the sQL exception
*/
public GregorianCalendar obtenDiaIniMinBD(int numReserva) throws SQLException {
Date fechaIni;
GregorianCalendar fechaGreg = new GregorianCalendar();
String sql = "SELECT DiaIni FROM Oferta WHERE NumReserva = ? ORDER BY DiaIni ASC LIMIT 0,1";
PreparedStatement ps = c.prepareStatement(sql);
ps.setInt(1, numReserva);
ResultSet rs = ps.executeQuery();
if(rs.next()) {
fechaIni = rs.getDate(1);
fechaGreg.setTime(fechaIni);
return fechaGreg;
} else {
throw new SQLException("No se ha encontrado ofertas asociadas a la reserva con ID = " + numReserva);
}
}
/**
* Metodo que anula la reserva que se le pasa por parametro.
*
* @param numReserva the num reserva
* @return int,
* numero de tuplas actualizadas en la base de datos
* @throws SQLException the sQL exception
*/
public int actualizarReservas(int numReserva) throws SQLException {
String upd = "UPDATE Reserva SET Anulado = 1 WHERE NumReserva = ?";
PreparedStatement ps = c.prepareStatement(upd);
ps.setInt(1, numReserva);
return ps.executeUpdate();
}
/**
* Metodo que obtiene el precio de la reserva que se le pasa por parametro.
*
* @param numReserva the num reserva
* @return float,
* precio de la reserva que se le pasa por parametro
* @throws SQLException the sQL exception
*/
public float obtenPrecioTotal(int numReserva) throws SQLException {
float precio;
String sql = "SELECT PrecioTotal FROM Reserva WHERE NumReserva = ?";
PreparedStatement ps = c.prepareStatement(sql);
ps.setInt(1, numReserva);
ResultSet rs = ps.executeQuery();
if(rs.next()) {
precio = rs.getFloat(1);
return precio;
} else {
throw new SQLException("No se ha encontrado la reserva con ID = " + numReserva);
}
}
/**
* Metodo que actualiza las oferta que tienen asociado el numero de reserva que se le pasa por parametro.
* Las ofertas en cuestion ya no estaran asociadas a ninguna reserva.
*
* @param numReserva the num reserva
* @return int,
* numero de tuplas actualizadas en la base de datos
* @throws SQLException the sQL exception
*/
public int actualizarOfertas(int numReserva) throws SQLException {
String upd = "UPDATE Oferta SET NumReserva = 0 WHERE NumReserva = ?";
PreparedStatement ps = c.prepareStatement(upd);
ps.setInt(1, numReserva);
return ps.executeUpdate();
}
/**
* Metodo que indica si la reserva que se le pasa por parametro ya ha sido pagada.
*
* @param numReserva the num reserva
* @return int,
* valor del campo pagado de la reserva que se le pasa por parametro en la base de datos.
* 0 indica que la reserva no ha sido pagada, y 1 que si.
* @throws SQLException the sQL exception
*/
public int estaPagado(int numReserva) throws SQLException{
String consulta = "SELECT Pagado from reserva where NumReserva=?";
int pagado;
PreparedStatement ps = c.prepareStatement(consulta);
ps.setInt(1, numReserva);
ResultSet rs = ps.executeQuery();
if (rs.next())
pagado = rs.getInt(1);
else
throw new SQLException("No se ha encontrado la reserva con ID = " + numReserva);
return pagado;
}
/**
* Hacer consulta.
*
* @param sql the sql
* @return the result set
* @throws SQLException the sQL exception
*/
public ResultSet hacerConsulta(String sql) throws SQLException{
return s.executeQuery(sql);
}
/**
* Metodo que reinicia la base de datos.
*
* @return int,
* valor del campo pagado de la reserva que se le pasa por parametro en la base de datos.
* 0 indica que la reserva no ha sido pagada, y 1 que si.
* @throws SQLException the sQL exception
*/
public void reiniciarBD() throws SQLException{
String consulta = "UPDATE reserva SET Anulado =0 where NumReserva=5";
s.executeUpdate(consulta);
consulta ="UPDATE oferta SET NumReserva=2 where Precio=75.00";
s.executeUpdate(consulta);
consulta ="UPDATE oferta SET NumReserva=5 where NumOferta=3";
s.executeUpdate(consulta);
consulta ="DELETE FROM reserva where NumReserva=25";
s.executeUpdate(consulta);
}
////////////////////////////
//NUEVO URKO
//
/////////////////////
/**
* Da de alta un nuevo servicio.
*
* @param pHorario variable de tipo DateTime, corresponde al horario del servicio
* @param pPuntoRecogida variable string define donde empieza el servicio
* @param pNumPlazas the num plazas
* @param d the d
* @param i the i
* @return Ninguno
*/
public void transaccionInsertServicio(Time pHorario,String pPuntoRecogida,
int pNumPlazas, double d,int i)
{
//para el horario
/*
* java.util.Date date = new java.util.Date();
* new java.sql.Time(date.getTime())
*
*/
String consulta = "INSERT INTO cararural2011.Servicio (horario,puntoRecogida,numPlazas,precio,idRecorrido)"
+ "VALUES('"
+ pHorario
+ "','"
+ pPuntoRecogida
+ "', " + pNumPlazas + "," + d + "," + i+ ")";
System.out.println(consulta);
try
{
c.setAutoCommit(false);
Statement f = c.createStatement();
f.executeUpdate(consulta);
}
catch (Exception ex) {
System.out.println(ex.toString());
}
}
/**
* Da de alta un nuevo recorrido.
*
* @param pInicio variable de tipo String, determina donde (localidad o estacion) comienza el recorrido)
* @param pFin variable string define la �ltima parada del servicio
* @return Ninguno
*/
public void transaccionInsertRecorrido(String pInicio,String pFin)
{
String consulta = "INSERT INTO cararural2011.Recorrido (inicio,fin)"
+ "VALUES('"
+ pInicio
+ "','"
+ pFin
+ "' )";
System.out.println(consulta);
try
{
c.setAutoCommit(false);
Statement f = c.createStatement();
f.executeUpdate(consulta);
}
catch (Exception ex) {
System.out.println(ex.toString());
}
}
/**
* A�ade una casaRural a un recorrido.
*
* @param pNumCasa variable de tipo int, identificador de la casaRural
* @param pIdRecorrido variable int correspondiente al identificador del Recorrido
* @return Ninguno
*/
public void transaccionAddCasaRecorrido(int pNumCasa,int pIdRecorrido)
{
String consulta = "INSERT INTO cararural2011.casaRecorrido (numCasa,idRecorrido)"
+ "VALUES("
+ pNumCasa
+ ","
+ pIdRecorrido
+ " )";
System.out.println(consulta);
try
{
c.setAutoCommit(false);
Statement f = c.createStatement();
f.executeUpdate(consulta);
}
catch (Exception ex) {
System.out.println(ex.toString());
}
}
/*
* Devuelve todas los Recorridos
*
* @param Ninguno
* @return Vector de objetos de la clase Recorrido
*/
/**
* Gets the lista recorridos.
*
* @return the lista recorridos
*/
public Vector getListaRecorridos()
{
Vector vectorRecorridos = new Vector();
try {
// String consulta="SELECT * FROM CasaRural";
String consulta = "SELECT * FROM Recorrido";
ResultSet rs = s.executeQuery(consulta);
while (rs.next()) {
int idRecorrido = rs.getInt("idRecorrido");
String Inicio= rs.getString("Inicio");
String Fin = rs.getString("Fin");
Recorrido re = new Recorrido(idRecorrido,Inicio,Fin);
vectorRecorridos.addElement(re);
}
} catch (Exception ex) {
System.out.println(ex.toString());
}
return vectorRecorridos;
}
/**
* Devuelve un propietario concreto sabiendo su alias
*
* @param pAlias el alias
* @return el propietario de alias pAlias
* @throws SQLException
*/
public Propietario getPropietarioConcreto(String pAlias) throws SQLException
{
Propietario pro = new Propietario();
try {
String consulta = "SELECT * FROM Propietario where CuentaSistema='"+pAlias+"'";
//System.out.println(consulta);
ResultSet rs = s.executeQuery(consulta);
while (rs.next()) {
pro.setAlias(rs.getString("CuentaSistema"));
pro.setPassword(rs.getString("Password"));
pro.setEsAdmin(rs.getBoolean("esAdmin"));
}
rs.last(); //me coloco en la ultima pos, pq rs.next te deja al principio otra vez
if ( rs.getRow()== 0 ) //no existe ese propietario
{
throw new SQLException("No se ha encontrado un usuario con alias = " + pAlias);
}
} catch (Exception ex) {
System.out.println(ex.toString());
}
return pro;
}
/*
* Devuelve todas los Servicios
*
* @param Ninguno
* @return Vector de objetos de la clase Servicio
*/
/**
* Gets the lista servicios.
*
* @return the lista servicios
*/
public Vector getListaServicios()
{
Vector vectorServicios = new Vector();
try {
// String consulta="SELECT * FROM CasaRural";
String consulta = "SELECT * FROM Servicio";
ResultSet rs = s.executeQuery(consulta);
while (rs.next()) {
int idServicio = rs.getInt("idServicio");
Time horario = rs.getTime("horario");
String puntoRecogida = rs.getString("puntoRecogida");
int numPlazas = rs.getInt("numPlazas");
float precio = rs.getFloat("precio");
int idRecorrido= rs.getInt("idRecorrido");
Servicio se = new Servicio(idServicio,horario,puntoRecogida,numPlazas,numPlazas, precio,idRecorrido);
vectorServicios.addElement(se);
}
} catch (Exception ex) {
System.out.println(ex.toString());
}
return vectorServicios;
}
/*
* Devuelve todas los Origenes
*
* @param Ninguno
* @return Vector de String Origen
*/
/**
* Gets the lista origenes.
*
* @return the lista origenes
*/
public Vector getListaOrigenes()
{
Vector vectorOrigenes = new Vector();
try {
// String consulta="SELECT * FROM CasaRural";
String consulta = "SELECT inicio FROM Recorrido";
ResultSet rs = s.executeQuery(consulta);
while (rs.next()) {
String pInicio = rs.getString("inicio");
vectorOrigenes.addElement(pInicio);
}
}
catch(Exception ex) {
System.out.println(ex.toString());
}
return vectorOrigenes;
}
/*
* Resta una unidad al num de plazas libres
*
* @param idServicio
* idServicio correspondiente al servicio que queremos disminuir en una unidad
* @return null
*/
/**
* Restar unidad servicio.
*
* @param idServicio the id servicio
* @param plazas the plazas
* @throws SQLException
*/
public void restarUnidadServicio(int idServicio, int plazas) throws SQLException
{
try{
s.executeUpdate("UPDATE Servicio SET plazasLibres= plazasLibres - " + plazas + " WHERE idServicio="+idServicio );
}
catch (Exception ex)
{
throw new SQLException("No se ha encontrado un idServicio con idServicio= "+ idServicio );
}
}
/**
* Adds the casa a recorrido.
*
* @param pNumCasa the num casa
* @param pIdRecorrido the id recorrido
*/
public void addCasaARecorrido(int pNumCasa,int pIdRecorrido)
{
try
{
String consulta = "insert into CasaRecorrido(idRecorrido, numCasa) values(?, ?)";
PreparedStatement pstmt = c.prepareStatement(consulta); // create a statement
pstmt.setInt(1, pIdRecorrido); // set input parameter 1
pstmt.setInt(2, pNumCasa); // set input parameter 2
pstmt.executeUpdate(); // execute insert statement
}
catch(Exception ex) {
System.out.println(ex.toString());
}
}
}