Continuacion ejemplo de base de datos y reports con jasper report
Try catch
1. TRY CATCH MANEJO DE EXCEPCIONES
Existe una excepción matetemática muy famosa, de dividir un número entre cero, así se
resolvería:
public static void main(String[] args) {
int cinco = 5;
int cero = 0;
try{
System.out.println(cinco/cero);
}catch(ArithmeticException exception){
System.out.println(exception);
}
System.out.println("Fin del programa");
}
En caso de que no pusieses aquí el bloque try catch, lo que sucedería es que la cadena "Fin del
programa no se imprimiría". Lo que hace el bloque try es envolver una zona de código peligrosa,
que pueda generar una excepción, y el bloque catch se encarga de resolverla, ten en cuenta que
puedes poner más de un catch para resolver más de una excepción que se pueda encontrar en
el mismo bloque try. Norlmalmente se recomienda que el bloque try catch envuelva la menor
parte de código posible, en el caso del ejemplo sólo hay una línea dentro.
Sintaxis del Bloque try/catch
try {
// Código que pueda generar Errores ("Exception's")
} catch(Tipo1 id1) {
// Manejar "Exception's" para la Clase Tipo1
} catch(Tipo2 id2) {
// Manejar "Exception's" para la Clase Tipo2
} catch(Tipo3 id3) {
// Manejar "Exception's" para la Clase Tipo3
}
La primer sección del Bloque es iniciada con el vocablo try y una llave ({ ) que indica el principio
de la zona protegida, dentro de esta primer sección es colocado todo código que pueda generar
algún tipo de error, al terminar esta sección se define un grupo de estructuras con el elemento
catch.
Como se puede observar en la ilustración, cada vocablo catch es seguido de un paréntesis que
contiene una Clase así como una referencia, estos son considerados los Datos de Entrada para
cada sección catch; el tipo de Clases definidas dentro de cada sección catch depende del
numero de "Exceptions" que pueden ser generadas por el programa; lo anterior permite definir
un numero ilimitado de "Exceptions" cada uno con su propio código para manejar el error.
Para todo Bloque try/catch debe ser definida al menos una sección catch; si son definidos más
de dos Clases para errores ("Exceptions") estas deben ser declaradas de más a menos
especifica, siendo la menos especifica la Clase java.lang.Throwable; es de esta Clase que son
Heredadas ("Inherited") todo "Exception" en Java, esto será descrito en la siguiente sección de
este curso.
2. Sintaxis del Bloque try/catch/finally
Para los Bloques try/catch existe una variación que consiste en agregar una sección denominada
finally, dicha estructura estaría compuesta de la siguiente manera:
try {
// Código que pueda generar Errores ("Exception's")
} catch(Tipo1 id1) {
// Manejar "Exception's" para la Clase Tipo1
} catch(Tipo2 id2) {
// Manejar "Exception's" para la Clase Tipo2
} catch(Tipo3 id3) {
// Manejar "Exception's" para la Clase Tipo3
} finally {
// Actividades que siempre ocurren
}
La utilización de finally es empleada dentro de un Bloque try/catch para realizar tareas que
deben ser ejecutadas independientemente del comportamiento de errores.
Cuando se atrapa un error ("Exception") un programa queda inconcluso, es esta terminación
abrupta la que puede causar que algún recurso/mecanismo permanezca asignado o mal
utilizado; a través de una sección finally se garantiza que sea ejecutado un juego de
instrucciones independientemente del tipo de error que pueda ocurrir; un uso muy común para
una sección finally consiste en liberar conexiones hacia Bases de Datos que pudieran haber sido
asignadas en la sección try.
EJEMPLO CON ERRORES
/* Ejemplo Gestión de Excepciones Java aprenderaprogramar.com */
public class
Programa
{
public static void
main
(String [] args) {
try
{
System.out.println("Intentamos ejecutar el bloque de instrucciones:");
System.out.println("Instrucción 1.");
int n = Integer.parseInt("M");//error forzado en tiempo de ejecución.
System.out.println("Instrucción 2.");
System.out.println("Instrucción 3, etc.");
}
catch
(Exception e){
System.out.println("Instrucciones a ejecutar cuando se produce un error");
}
finally
{
System.out.println("Instrucciones a ejecut
ar finalmente tanto si se producen errores como si no.");
}
3. }
}
Se produce un error porque el método parseInt de laclase Integer espera que dentro de las
comillas llegue un número y no una letra. Por ejemplo
int n = Integer.parseInt("65"); sirve para transformar elString 65 en un int de valor 65. Al no
encontrar un valor válido se produce un error de tipo
java.lang.NumberFormatException.
DIVISIÓN POR CERO
public class PruebaExcepciones {
public static void main(String args[]) {
int valor=5, cero=0;
int[] array = {1, 2, 3};
try {
valor = valor/cero; //división por cero
array[4]= 5; //acceso a una posición no disponible
}
catch( ArithmeticException e ) {
System.out.println( "Division por cero" );
}
catch( Exception e ) {
System.out.println( "Se ha producido un error" );
}
}
}
OTRO EJEMPLO
public class PruebaExcepcion {
public static void main(String args[]) {
int valor=5, cero=0;
int[] array = {1, 2, 3};
try {
try {
valor = valor/cero; //división por cero
array[4]= 5; //acceso a una posición no disponible
}catch( ArithmeticException e ) {
System.out.println( "Division por cero" );
throw e;
}catch( Exception e ) {
System.out.println( "Se ha producido un error" );
}
}catch(Exception e){
System.out.println(e.getMessage());
}
}
}
Ejemplo excepción definida por el usuario
Public class Persona{
int edad;
4. .....
public void ponEdad(int ed) throws EdadFueraDeRango
Exception {
if ((ed < 0) || (ed > 130))
throw new EdadFueraDeRangoException("Demasiado jove
n o demasiado viejo");
edad = ed;
}}
try {
alguien.ponEdad(150);
} catch (EdadFueraDeRangoException e){
System.out.println("se ha producido la excepción");
e.printStackTrace();
System.out.println(e.getMessage());
}
EdadFueraDeRangoException: Demasiado joven o demasi
ado viejo
at Persona.ponEdad<Persona.java>
at Persona.main<Persona.java>