Duda sobre Exception Java

Iniciado por carlitox18, 14 Mayo 2011, 15:06 PM

0 Miembros y 1 Visitante están viendo este tema.

carlitox18

Saludos a la comunidad espero me puedan ayudar y sacar de esta duda, soy nuevo en java, tengo una clase y metodos, este metodo uso un simple try catch... mi duda es si al hacer throw e; al momento de distribuir mi apliacion al capturar un error se mostrara en una ventana de dialogo y no en el  output de java. este es el codigo saludos y gracias.

    public int RegistraCliente(Cliente cliente) throws Exception
    {
        Connection con = null;
        int generatedId = -1;
        ResultSet rs = null;
        CallableStatement stmt = null;
       
        try {
            con = new Conexion().getConection();
            stmt = con.prepareCall("{call public.cliente_insert_usp (?,?,?,?,?,?,?,?)}");
            stmt.setString(1, cliente.getRazonsocial());
            stmt.setString(2, cliente.getNrodni());
            stmt.setString(3, cliente.getNroruc());
            stmt.setString(4, cliente.getDireccion());
            stmt.setDouble(5, cliente.getLimitecredito());
            stmt.setInt(6,cliente.getNroventas());
            stmt.setDate(7,cliente.getFecharegistro());
            stmt.setBoolean(8, cliente.getEstado());
            rs = stmt.executeQuery(); 
           
            if (rs.next())
            {
                generatedId = rs.getInt(1);
            }
        }
        catch (Exception e)
        {
            throw e;
        }
        finally
        {
            rs = null;
            if(stmt != null)
                con.close();
                con = null;
                stmt = null;
        }
       
        return generatedId;
    }




ShotgunLogic

Hombre, capturarlo para lanzarlo no tiene mucho sentido a no ser que vayas a cambiar algo, ¿no?

Normalmente cuando capturas un error es para tratarlo y hacer que el programa siga funcionando, por eso normalmente cuando se coge un error se suele poner un bucle para hacer que el usuario pueda repetir la operación o lo que sea.

Cuando deberías de mandar un error en el programa final es con las excepciones no comprobadas. Normalmente estas se usan cuando los errores se dan por fallos de tu programación, como que le pases el índice -1 a un array. De hecho, estos errores que te saltan cuando estas probando el programa los ha añadido un programador que ha programado esas clases de java que todos usamos.

De todas formas lo que pregutnas no se exactamente, si un programa casca supongo que habra maneras de simplemente alertar al usuario y recoger el programa de la forma más elegante posible.

Un saludo! :P
The clans are marching against the law, bagpipers play the tunes of war, death or glory I will find, rebellion on my mind.

Littlehorse

Si quieres que salga en una ventana de dialogo tendrás que redirigir el contenido del mensaje a tal ventana. De lo contrario si, saldrá en el output siempre que imprimas algo, por ejemplo en un programa que todavía no esta en producción siempre puedes hacer algo como:

Código (java) [Seleccionar]

try{
//random code
}catch (Exception e)
        {
           e.printStackTrace();
        }


En cuanto a lo de lanzar excepciones adentro de un catch, en el caso del primer post no tiene sentido hacerlo así pero, a veces se lanzan excepciones dentro del bloque catch, dependiendo de la gravedad de la excepción por la cual se entra en ese lugar.

Saludos!
An expert is a man who has made all the mistakes which can be made, in a very narrow field.

ShotgunLogic

Cita de: Littlehorse en 14 Mayo 2011, 23:37 PM
Si quieres que salga en una ventana de dialogo tendrás que redirigir el contenido del mensaje a tal ventana. De lo contrario si, saldrá en el output siempre que imprimas algo, por ejemplo en un programa que todavía no esta en producción siempre puedes hacer algo como:

Código (java) [Seleccionar]

try{
//random code
}catch (Exception e)
        {
           e.printStackTrace();
        }


En cuanto a lo de lanzar excepciones adentro de un catch, en el caso del primer post no tiene sentido hacerlo así pero, a veces se lanzan excepciones dentro del bloque catch, dependiendo de la gravedad de la excepción por la cual se entra en ese lugar.

Saludos!

Puestos a hacer eso podrias ya hacer dentro del catch:

throw new Exception("Mensaje que quieras que salga");

Así luego en el main podrás hacer que aparezca el mensaje que pusiste aquí, y te quedará más estructurado. De todas formas cuidado con el flujo del programa, que igual coges ese error pero sigues con el flujo y te saltan 50 errores más xD

Saludos!
The clans are marching against the law, bagpipers play the tunes of war, death or glory I will find, rebellion on my mind.

Littlehorse

Si, obvio, dentro del catch cada uno se tiene que encargar de manejar ese error correctamente para que el flujo de la aplicación continue en forma correcta. Las posibilidades son infinitas, pero depende también el contexto de la aplicación. Si estuvieses en un servlet por ejemplo, a lo mejor uno podría tener un método que parsee el error para mandarlo bien armado como string hacia otro lugar (para poder asignarlo como elemento a algún jsp -error.jsp, etc-) y luego hacer un forward a esa vista. En una aplicación de escritorio podes tener ese mismo método que parsee el error y luego lo mande a un dialog box, o donde sea.

Lo de lanzar otra exception del mismo tipo dentro de un catch personalmente no me gusta, no porque este mal si no que para el que esta leyendo el código es una patada. En todo caso ahí lo que habría que hacer, si no queda alternativa mas que lanzar otra exception, es lanzar una mas especifica que sea acorde al error encontrado.
En el caso del mensaje de la exception, podes usar getMessage() y luego esa información mostrarla/mandarla donde sea adecuado.

Saludos!


An expert is a man who has made all the mistakes which can be made, in a very narrow field.