/**
* @file JugadorBD.java
* Archivo que contiene la clase JugadorBD.java
*
* @author Carlos Rabelo
* @version 1.2
*/
package GestorJugadores;
import ConexionBD.ConexionBD;
import GestorCuota.CuotaBD;
import GestorPago.PagoBD;
import java.sql.ResultSet;
import java.sql.SQLException;
import sun.util.calendar.CalendarDate;
/**
* Clase intermedia entre ConexionBD y ControladorJugador
*
* Esta clase hace de traductor entre objetos Jugador y consultas SQL
* para hacer posible la comunicación entre ControladorJugador y la BD
* Se implementa siguiendo el patrón de Diseño "Singleton"
*
* @author Carlos Rabelo
* @version 1.2
*/
public class JugadorBD {
private static JugadorBD Instancia=null;
/**
* Constructor por defecto. Al ser un singleton el contructor es privado
* @param void
* @return void
*/
private JugadorBD(){}
/**
* Método que devuelve la única instancia de la clase
* @param void
* @return Instancia
*/
public static JugadorBD getInstancia() {
if (Instancia==null){
Instancia = new JugadorBD();
}
return Instancia;
}
@Override
/**
* Sobrecarga del método clone para impedir que se duplique la instancia
* (Exigencias del patrón Singleton)
* @param void
* @return Object
*/
public Object clone() throws CloneNotSupportedException {
throw new CloneNotSupportedException();
}
/**
* Método que añade un objeto Jugador a la Base de Datos
* Si se pretende modificar un Jugador existente en la Base de Datos
* utilizar el método updateJugador
* @param jug Objeto Jugador a añadir
* @return El objeto Jugador con el atributo jugadorId actualizado si
* acabó con éxito o null si hubo algún error
* @author Carlos Rabelo
*/
public Jugador addJugador(Jugador jug) {
java.sql.Date nacimiento=new java.sql.Date(jug.getNacimiento().getTime());
String consulta="INSERT INTO Jugador(Nombre,Apellidos,Sexo,Nacimiento," +
"Talla,Tutor,Correo,NumCuenta,Telefono,Observaciones,FormaPago,Estado) VALUES ('" +
jug.getNombre() +
"','" + jug.getApellidos() +
"','" + jug.getSexo() +
"','" + nacimiento.toString() +
"','" + jug.getTalla() +
"','" + jug.getTutor() +
"','" + jug.getCorreo() +
"','" + jug.getNumCuenta() +
"','" + jug.getTelefono().toString() +
"','" + jug.getObservaciones().toString() +
"','" + jug.getFormaPago() +
"','";
if (jug.getEstado()) {
consulta+="activo');";
} else {
consulta+="baja');";
}
try {
ConexionBD.getInstancia().conectar();
ResultSet salidaBD=ConexionBD.getInstancia().actualizar(consulta);
salidaBD.first();
// Establece el valor de IdJugador generado por la BD en el objeto jug
jug.setIdJugador(Integer.parseInt(salidaBD.getString(1)));
ConexionBD.getInstancia().desconectar();
} catch (SQLException ex) {
return null;
}
return jug;
}
/**
* Método que elimina un objeto Jugador de la Base de Datos
* El Jugador en realidad no es eliminado sino que se le cambia
* el atributo estado a 'baja' pero se mantiene en la Base de Datos
* @param idJugador el identificador único del Jugador en la BD
* @return true si se modificó con éxito false si no
* @author Carlos Rabelo
*/
public Boolean deleteJugador(Integer idJugador) {
try {
// Hacer comprobaciones si necesario
ConexionBD.getInstancia().conectar();
String consulta="UPDATE Jugador SET Estado='baja' WHERE idJugador=" + idJugador.toString() + ";";
ConexionBD.getInstancia().actualizar(consulta);
ConexionBD.getInstancia().desconectar();
} catch (SQLException ex) {
return false;
}
return true;
}
public Jugador getJugador(int idJugador){
String consulta="SELECT * FROM Jugador WHERE "+
" idJugador = '" + idJugador + "'"+
";";
Jugador listajug = null;
try {
ConexionBD.getInstancia().conectar();
ResultSet tabla = ConexionBD.getInstancia().consultar(consulta);
if (tabla.last()) { // Si devuelve false es que la búsqueda es vacía
int nfilas=tabla.getRow();
tabla.beforeFirst(); // Volvemos al principio
//listajug=new Jugador;
Boolean estado;
for (int i=0; i<nfilas; i++){
tabla.next();
estado = true;
if (tabla.getString("Estado").equals("baja")) {
estado = false;
}
listajug = new Jugador(tabla.getString("Nombre"), tabla.getString("Apellidos"),
tabla.getString("Sexo").charAt(0), tabla.getDate("Nacimiento"),
tabla.getString("Talla"), tabla.getString("Tutor"), tabla.getString("Correo"),
tabla.getString("NumCuenta"), tabla.getInt("Telefono"),
tabla.getString("Observaciones"),
tabla.getString("FormaPago").charAt(0),
estado);
listajug.setIdJugador(idJugador);
}
}
ConexionBD.getInstancia().desconectar();
} catch (SQLException ex) {
return null;
}
return listajug;
}
/**
* Método que hace una consulta en la tabla Jugador de la Base de Datos
* y devuelve un vector de Jugadores que cumplen los parámetros de búsqueda
* @param nombre_jug Nombre del jugador
* @param apellidos_jug Apellidos del jugador
* @return Vector de objetos Jugador cumpliendo los parámetros de búsqueda
* si lo hubiera o null en caso de error o si la consulta no ha dado
* resultados
*/
public Jugador[] getJugador(String nombre_jug, String apellidos_jug) {
// Solo se implementa la búsqueda por nombre y apellidos que es lo especificado en el diagrama de secuencia correspondiente
String consulta="SELECT * FROM Jugador WHERE Jugador.Nombre LIKE '" + nombre_jug + "%' AND Jugador.Apellidos LIKE '" + apellidos_jug + "%';";
Jugador[] listajug=null;
try {
ConexionBD.getInstancia().conectar();
ResultSet tabla = ConexionBD.getInstancia().consultar(consulta);
if (tabla.last()) { // Si devuelve false es que la búsqueda es vacía
int nfilas=tabla.getRow();
tabla.beforeFirst(); // Volvemos al principio
listajug=new Jugador[nfilas];
Boolean estado;
for (int i=0; i<nfilas; i++){
tabla.next();
estado = true;
if (tabla.getString("Estado").equals("baja")) {
estado = false;
}
listajug[i] = new Jugador(tabla.getString("Nombre"), tabla.getString("Apellidos"),
tabla.getString("Sexo").charAt(0), tabla.getDate("Nacimiento"),
tabla.getString("Talla"), tabla.getString("Tutor"), tabla.getString("Correo"),
tabla.getString("NumCuenta"), tabla.getInt("Telefono"),
tabla.getString("Observaciones"),
tabla.getString("FormaPago").charAt(0),
estado);
listajug[i].setIdJugador(tabla.getInt("IdJugador"));
}
}
ConexionBD.getInstancia().desconectar();
} catch (SQLException ex) {
return null;
}
return listajug;
}
/**
* Método que modifica un objeto Jugador de la Base de Datos
* El Jugador debe estar en la Base de Datos previamente
* El objeto a modificar se reconoce por el atributo idJugador y
* se actualizan los valores de los parámetros a los que tiene
* el objeto Jugador
* @param idJugador el identificador único del Jugador en la BD
* @return true si se modificó con éxito false si no
* @author Carlos Rabelo
*/
/**
* Método que debe modificar un jugador pero que no se puede implementar
* porque no se puede identificar al jugador de forma unívoca
* @param nombre_jug Nombre del jugador
* @param apellidos_jug Apellidos del jugador
* @param sexo_jug Sexo del jugador
* @param nacimiento_jug Fecha de nacimiento del jugador
* @param talla_jug Talla del jugador
* @param tutor_jug Nombre del tutor del jugador
* @param correo_jug Correo electrónico del jugador
* @param num_cuenta_jug Número de cuenta del jugador
* @param tlf_jug Teléfono del jugador
* @param estado_jug Estado (activo o baja) del jugador
* @return true si se modificó con éxito false en caso contrario
*/
public Boolean updateJugador(Jugador jug) {
Boolean salida=true;
// Hacer comprobaciones si necesario
java.sql.Date nacimiento=new java.sql.Date(jug.getNacimiento().getTime());
String consulta="UPDATE Jugador SET Nombre='" + jug.getNombre() +
"', Apellidos='" + jug.getApellidos() +
"', Sexo='" + jug.getSexo() +
"', Nacimiento='" + nacimiento.toString() +
"', Talla='" + jug.getTalla() +
"', Tutor='" + jug.getTutor() +
"', Correo='" + jug.getCorreo() +
"', NumCuenta='" + jug.getNumCuenta() +
"', Telefono='" + jug.getTelefono().toString() +
"', Observaciones='" + jug.getObservaciones().toString() +
"', FormaPago='" +jug.getFormaPago()+
"', Estado='"
;
if (jug.getEstado()) {
consulta+="activo";
} else {
consulta+="baja";
}
consulta+="' WHERE idJugador=" + jug.getIdJugador().toString() + ";";
try {
ConexionBD.getInstancia().conectar();
ConexionBD.getInstancia().actualizar(consulta);
ConexionBD.getInstancia().desconectar();
} catch (SQLException ex) {
System.out.println(ex);
salida=false;
}
return salida;
}
public Integer [] getListaJugadores(){
// Solo se implementa la búsqueda por nombre y apellidos que es lo especificado en el diagrama de secuencia correspondiente
String consulta="SELECT idJugador FROM Jugador ';";
Integer [] listajug=null;
try {
ConexionBD.getInstancia().conectar();
ResultSet tabla = ConexionBD.getInstancia().consultar(consulta);
if (tabla.last()) { // Si devuelve false es que la búsqueda es vacía
int nfilas=tabla.getRow();
tabla.beforeFirst(); // Volvemos al principio
listajug=new Integer[nfilas];
Boolean estado;
for (int i=0; i<nfilas; i++){
tabla.next();
listajug[i] = new Integer(tabla.getInt(i));
}
}
ConexionBD.getInstancia().desconectar();
} catch (SQLException ex) {
return null;
}
return listajug;
}
}