Ver Mensaje Individual
  #1 (permalink)  
Antiguo 05/03/2013, 06:44
Avatar de adrianBenjuya
adrianBenjuya
 
Fecha de Ingreso: noviembre-2012
Mensajes: 20
Antigüedad: 11 años, 6 meses
Puntos: 0
No puedo capturar una excepción

Hola gente, estoy haciendo un pequeño trabajo práctico sobre servlets y MySQL para la facultad y se me genera éste problema. En mi base de datos tengo guardados unos cuantos usuarios con sus respectivos "nombre_usuario", por lo tanto en mi formulario de registro de usuario le agregué el camino alternativo para que muestre en rojo el mensaje "Ya existe ese usuario" si es que alguien está intentando registrarse con un nombre de usuario ya existente en mi base de datos, por lo tanto se me ocurrió que la clase que maneja la conexión con dicha BD dispare una excepción cuando esto ocurra. Creo que lo programé bien, pero no puedo hacer que el programa me capture la excepción... o sea, sé que la excepción se produce ya que puedo ver el error por consola, pero no se ejecuta el bloque "catch", sino que se ejecuta normalmente como si no se hubiese disparado la misma. Les dejo el código para ver si alguno puede ayudarme.

Saludos!

Clase NuevoUsuario (servlet - es la clase que captura la excepción)

Código:
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		String nombreUsuario = request.getParameter("nombreUsuario"),         contraseña = request.getParameter("contraseña1")
			try{
				controlador.nuevoJugador(nombreUsuario,contraseña);
			}
			catch(YaExisteUsuarioException e){
				devolverPaginaErrorUsuario(response,nombreUsuario,e);
			}
			devolverPagina(response);
}
Clase Controlador (no pretendo que esta clase maneje la excepción, sólo que la envíe hacia arriba)

Código:
public void nuevoJugador(String nombreUsuario, String contraseña) throws YaExisteUsuarioException{
		conexionSql.iniciarConexion();
		conexionSql.registrarJugador(nombreUsuario, contraseña);
		conexcionSql.terminarConexion();
		jugadorActual = new Jugador(nombreUsuario, contraseña);
	}
Clase ConexiónMySQL (es la clase que dispara la excepción)

Código:
public void registrarJugador(String nombreUsuario, String contraseña) throws YaExisteUsuarioException{
		try{
			ResultSet rs = st.executeQuery("SELECT nombre_usuario FROM jugadores WHERE nombre_usuario LIKE '"+nombreUsuario+"'");
			int cont = 0;
			while(rs.next())
				cont++;
			if(cont == 0){
				st.executeUpdate("INSERT INTO jugadores (nombre_usuario,contraseña) VALUES ('"+nombreUsuario+"','"+contraseña+"')");
			}
			else{
				throw new YaExisteUsuarioException("El nombre de usuario ya está en uso");
			}
		}
		catch(Exception e){
			e.printStackTrace();
		}
	}