Foros del Web » Programación para mayores de 30 ;) » Java »

[SOLUCIONADO] No puedo capturar una excepción

Estas en el tema de No puedo capturar una excepción en el foro de Java en Foros del Web. 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 ...
  #1 (permalink)  
Antiguo 05/03/2013, 06:44
Avatar de adrianBenjuya  
Fecha de Ingreso: noviembre-2012
Mensajes: 20
Antigüedad: 11 años, 5 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();
		}
	}
  #2 (permalink)  
Antiguo 05/03/2013, 07:08
Avatar de Fuzzylog  
Fecha de Ingreso: agosto-2008
Ubicación: En internet
Mensajes: 2.511
Antigüedad: 15 años, 8 meses
Puntos: 188
Respuesta: No puedo capturar una excepción

Haz un println antes del throw a ver si se va por ahi.
__________________
if (fuzzy && smooth) {
fuzzylog = "c00l";
return true;
}
  #3 (permalink)  
Antiguo 05/03/2013, 07:12
Avatar de adrianBenjuya  
Fecha de Ingreso: noviembre-2012
Mensajes: 20
Antigüedad: 11 años, 5 meses
Puntos: 0
Respuesta: No puedo capturar una excepción

Sisi, la excepción se dispara, el problema es que no la capturan

Ahora que me estoy dando cuenta, en la consola no solo veo el println que hice para saber si va por ese camino, sino que también veo todo el mensaje de la ejecución de la excepción (eso que aparece en letras rojas)... si yo la hubiese capturado eso no tendría que aparecer, no?
  #4 (permalink)  
Antiguo 05/03/2013, 07:42
Avatar de adrianBenjuya  
Fecha de Ingreso: noviembre-2012
Mensajes: 20
Antigüedad: 11 años, 5 meses
Puntos: 0
Respuesta: No puedo capturar una excepción

Listo, lo solucioné. Se ve que el throw en la clase conexión no debe ir dentro de un try (el cual pertenecía a excepciones de la base de datos). Entonces lo saqué afuera del try y ahora sí captura la excepción.

Quedó así:

Código:
public void registrarJugador(String nombreUsuario, String contraseña) throws YaExisteUsuarioException{
                int cont = 0;
		try{
			ResultSet rs = st.executeQuery("SELECT nombre_usuario FROM jugadores WHERE nombre_usuario LIKE '"+nombreUsuario+"'");
			while(rs.next())
				cont++;
		}
		catch(Exception e){
			e.printStackTrace();
		}
               if(cont == 0){
                         try{
				st.executeUpdate("INSERT INTO jugadores (nombre_usuario,contraseña) VALUES ('"+nombreUsuario+"','"+contraseña+"')");
			}
                        catch(Exception e){
                              e.printStrakeTrace();}
                 }
			else	throw new YaExisteUsuarioException("El nombre de usuario ya está en uso");
}
  #5 (permalink)  
Antiguo 05/03/2013, 08:30
Avatar de Fuzzylog  
Fecha de Ingreso: agosto-2008
Ubicación: En internet
Mensajes: 2.511
Antigüedad: 15 años, 8 meses
Puntos: 188
Respuesta: No puedo capturar una excepción

Ya veo, entonces tal y como lo tenías en el método registrarJugador() esto también te debería funcionar

} catch(YaExisteUsuarioException ex){
throw ex;
} catch(Exception e){
e.printStackTrace();
}
__________________
if (fuzzy && smooth) {
fuzzylog = "c00l";
return true;
}

Etiquetas: clase, formulario, programa, servlet, string
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 11:49.