Exception:
public Database(){ try{ Class.forName(drv); ct =DriverManager.getConnection(db, user, pword); st =ct.createStatement(); System.out.println("Conección exitosa."); }catch(Exception e){ System.out.println("No se pudo conectar a la base de datos."); } }
En el código anterior se muestra un constructor utilizado para hacer conexión con la base de datos. Todo el código va dentro de un "try" y después un "catch" con una excepción y un mensaje al usuario.
La excepción es del tipo Exception ya que se utiliza la clase Class que solo puede aceptar un tipo de excepción general.
SQLException:
public void showAll(String matt, String pass) { String dia = new String(); Scanner a = new Scanner(System.in); System.out.println("Introduzca un dia (Lu, Ma, Mi, Ju, Vi, Sa): "); dia = a.next(); dayselection = dia; try{ do{ stmt = ct.prepareStatement("SELECT * FROM Alumnos, "+dia+" WHERE Alumnos.idAlumnos = ? AND Alumnos.idPass = ? AND Alumnos.idAlumnos = "+dia+".idAlumnos"); stmt.setString(1,matt); stmt.setString(2, pass); rs = stmt.executeQuery(); if(rs.next()){ System.out.println("Seleccione Horario: "); String sub = a.next(); System.out.println(rs.getString(sub)); subselection=rs.getString(sub); fill_data(); rs.close(); } else{ System.out.print("Error"); rs.close(); } }while(rs.isClosed()==false); }catch(SQLException e){ System.out.println("No se pudo realizar la consulta."); } }
En el código anterior se muestra un método para obtener información de una base de datos a partir de un usuario y una contraseña. Todas las consultas de SQL deben de ir en un try y acompañadas de un catch. En este caso es una excepción del tipo SQLException, que provee información sobre algún error de conexión a la base de datos, en este caso manda al usuario un mensaje de error diciendo que no se pudo conectar a la base de datos.
public void fill_data(){ try{ stmt = ct.prepareStatement("SELECT * FROM "+subselection+", "+dayselection+" WHERE "+dayselection+".idAlumnos = "+subselection+".idAlumnos"); rs = stmt.executeQuery(); while(rs.next()){ for(int i=2; i<=9; i++){ phrs(i); if(rs.getString(i) == null){ System.out.println("Sin Datos"); } else{ System.out.println(rs.getString(i)); } } } }catch(SQLException i){ System.out.println("No tiene materia asignada en ese horario."); } }
En este caso sucede lo mismo ya que se desea realizar una consulta, este método se encarga de mostrar materias habiendo introducido un horario, de haber un error en la consulta, significa que no existe una materia en el horario seleccionado, de haber cualquier otro tipo de error, el programa jamas habría llegado a este punto.
IOException:
public static void main(String[] args) throws IOException{ boolean selec=true; Horario h = new Horario(); Console terminal = System.console(); if (terminal==null ) { System.err.println("No puedo obtener la consola."); return; } String mat = new String (terminal.readLine("Ingresar Usuario: ")); String pass= new String (terminal.readPassword("Ingresar contraseña: ")); while(selec == true|| selec ==true){ h.showAll(mat, pass); System.out.print("¿Desea ver otra materia?(S/N): "); char sel= (char) System.in.read(); switch(sel) { case 's': selec = true; break; case 'S': selec=true; break; default: selec = false; break; } } }
Existe otra forma de expresar un error, lanzando directamete una excepción sin un try y catch. Este es el método main, y la palabra seguida "throws" que significa lanza, que literalmente lanza una excepción de tipo IOException, es utilizada para mostrar información de errores de entrada y salida.
En este caso, la clase Console siempre debe de ser acompañada de este tipo de excepciones, ya que si se ejecuta el programa desde un lugar distinto de la consola, este lanzara un mensaje de error.