@Override
    public TCliente mostrarCliente(int ID) throws Exception {
        Statement query = null;
        Connection connection = null;
        TCliente ret = null;
        TClienteNormal normal = new TClienteNormal();
        TClienteVip vip = new TClienteVip();
        //baja lógica de cliente (solo en la tabla de los genéricos)
        String contenido_query = "SELECT * FROM Clientes WHERE id_cliente = " + ID + ";";                
                
        try
        {
            connection = (Connection) TransactionManager.obtenerInstanacia().getTransaccion().getResource();
            query = connection.createStatement();
        }
        catch (SQLException e)
        {
            throw new SQLException("No se ha podido realizar la conexión con la base de datos. \nEs posible que haya olvidado crear o iniciar la transacción"
                    + "\nError: " + e.getMessage());
        }
         try
        {
            System.out.println(contenido_query);
            query.execute(contenido_query);
            ResultSet rs = query.getResultSet();            
            if (rs.next())
            {       
                int id = rs.getInt("id_cliente");
                String dni = rs.getString("DNI");
                String nombre = rs.getString("Nombre");
                String apellidos = rs.getString("Apellidos");
                String nacimiento = rs.getString("Fecha_nacimiento");
                Boolean activo = rs.getBoolean("Disponible");
                
                if (rs.getString("tipo").equalsIgnoreCase("normal"))
                {
                    
                    query.execute("SELECT QuiereVip FROM ClientesNormales WHERE id_cliente = " + ID + ";");
                    ResultSet rs2 = query.getResultSet();
                    if (rs2.next())
                    {
                        normal.setQuierevip(rs2.getString("QuiereVip").equalsIgnoreCase("1")); 
                        ret = normal;
                    }
                    else
                        throw new Exception("Inconsistencia en la base de datos. El cliente consta como normal, pero no esta guardado sus atributos como cliente normal");
                }
                else
                {
                    
                    query.execute("SELECT Financiacion FROM ClientesVip WHERE id_cliente = " + ID + ";");
                    ResultSet rs2 = query.getResultSet();
                    if (rs2.next())
                    {
                        Float dummy = Float.parseFloat(rs2.getString("Financiacion"));
                        vip.setFinanciacion(dummy); 
                        ret = vip;
                    }
                    else
                        throw new Exception("Inconsistencia en la base de datos. El cliente consta como VIP, pero no esta guardado sus atributos como cliente VIP"); 
                }
                ret.setId(id);
                ret.setDNI(dni);
                ret.setNombre(nombre);
                ret.setApellidos(apellidos);
                ret.setFechaNacimiento(nacimiento);
                ret.setActivo(activo);
            }
        }
        catch (SQLException e)
        {
            throw new SQLException("No se ha podido consultar el cliente. \nError: " + e.getMessage());
        }
        return ret;
    }