Base de datos duda !

Publicado en 'Programación' por Jonaaaa, 11 Abr 2015.





  1. Jonaaaa

    Jonaaaa Miembro frecuente

    Registro:
    27 Jul 2013
    Mensajes:
    99
    Likes:
    3




    Buenas noches amigos , tengo una consulta , estoy practicando base de datos con formularios en java(netbeans), pero quisiera que alguien me diga cual es la funcion de colocar try/catch
    Clase HabitacionBd

    package javaexamen;

    import java.sql.*;

    import javax.swing.*;

    public class HabitacionBd {

    Connection con = null;

    Statement stm = null;

    ResultSet res = null;

    Habitacion hab = null;

    public HabitacionBd()

    {

    try {

    Class.forName("org.apache.derby.jdbc.ClientDriver");



    System.out.println("El Driver se cargo satisfactoriamente");

    }catch(ClassNotFoundException e){

    System.err.println("Error al cargar Driver\n" +e.getMessage());

    }



    try {

    con=DriverManager.getConnection("jdbc:derby://localhost:1527/BDHOTEL","sa","alumno");

    stm=con.createStatement();

    System.out.println("conexion satisfactoria");

    }catch(SQLException e){

    System.err.println("Error al cargar Driver\n" +e.getMessage());

    }

    }


    public void grabar(Habitacion h) {

    try {

    String sql = "insert into HABITACION values('" + h.getNum() + "','" + h.getTip() + "',"+ h.getPre() + ")";

    stm.executeUpdate(sql);

    stm.close();

    con.close();

    } catch (SQLException e) {

    JOptionPane.showMessageDialog(null, e.getMessage(), "Error Base de datos", JOptionPane.ERROR_MESSAGE);

    }

    }





    public void eliminar(String n) {

    try {

    String sql = "delete from habitacion where num='" + n + "'";

    stm.executeUpdate(sql);

    stm.close();

    con.close();

    } catch (SQLException e) {

    JOptionPane.showMessageDialog(null, e.getMessage(), "Error Base de datos", JOptionPane.ERROR_MESSAGE);

    }

    }

    public void actualizar(Habitacion h) {

    try {

    String sql ="update habitacion set tipo='"+ h.getTip() + "', precio=" + h.getPre() + " where num='" + h.getNum() + "'";

    stm.executeUpdate(sql);

    stm.close();

    con.close();

    } catch (SQLException e) {

    JOptionPane.showMessageDialog(null, e.getMessage(), "Error Base de datos", JOptionPane.ERROR_MESSAGE);

    }

    }

    public void buscar(String n) {

    try {

    String sql = "select * from habitacion where num='" + n + "'";

    res = stm.executeQuery(sql);

    while (res.next())

    hab = new Habitacion(res.getString(1), res.getString(2), res.getDouble(3));

    stm.close();

    con.close();

    } catch (SQLException e) {

    JOptionPane.showMessageDialog(null, e.getMessage(), "Error Base de datos", JOptionPane.ERROR_MESSAGE);

    }

    }

    public Habitacion getHabitacion() {

    return hab;

    }




    }




    >>en la parte de arriba coloca la conexion , esa coenccion es la que ira enlazada a la BD? y cual es la funcion del try/catch a mi entender es para evitar que el programa corra con problema y poder colocar excepciones , estoy en lo cierto?
     


  2. debugger

    debugger Miembro nuevo

    Registro:
    13 Jun 2014
    Mensajes:
    38
    Likes:
    6
    con el try catc capturas la excepcion, es decir en caso no conecte, o los parametros de conexion esten mal, te mandara un mensaje, como ahi colocaste e.getMessage();, te saldra en consola el error, pero si quieres ser mas especifico en el error, ponle e,prinktacktracer(), creo que se escribe asi...suerte, no olvides debugear, se comprende mejor el codigo.
     
  3. AiApaec

    AiApaec Miembro frecuente

    Registro:
    1 May 2014
    Mensajes:
    58
    Likes:
    14
    Hola, como ya dijo el forista de arriba el bloque try/catch permite manejar(handle) una excepción producida en el programa. Una excepción es un evento que se produce o lanza cuando ha ocurrido un error.
    Cuando se produce una excepción el runtime del sistema (es decir no lo haces tú explicitamente) busca un manejador al cual enviar la excepción producida, si no lo encuentra en el método donde se produjo la excepción entonces va y busca el nivel superior, es decir el método que llamó al método donde se produjo la excepción y así va subiendo de nivel buscando un manejador de la excepción (un try/catch) hasta encontrar el correspondiente. Si no se maneja la excepción entonces el programa para su ejecución, el try/catch permite evitar esto y continuar con la ejecución del programa haciendolo más robusto.
    Hay varios tipos de excepciones, cada uno representado por una clase concreta, por ejemplo SQLException es una clase que hereda de la clase Exception y hay un montón más, tú tambien puedes crearte tus propias excepciones usando herencia.
    Pero un método que va a lanzar (si ocurre un error) una excepción debe declararlo en la cabecera, en la firma del método:
    PHP:
    public int dividir(int aint bthrows Exception{

    //Si b es igual a cero se lanza una excepción, ya no se sigue ejecutando el código que sigue,
    //a partir de ahora el runtime busca un manejador para esa excepcion, no lo encuentra en este método
    //así que va y busca en el método cliente (el que llamó a éste).
    //Si b es diferente de cero entonces se realiza la división y se retorna el resultado
      
    if(== 0)
          
    throws new Exception("no se puede dividir por cero");

      return 
    a/b;
    }
    Si estás escribiendo código y sabes que cierta parte es suceptible de errores en tiempo de ejecución, es decir que se puede producir un error y quieres manejarlo de alguna manera, ya sea para registrar el error en un archivo de log o lo que sea, entonces usas el bloque try/catch:
    PHP:
    public void llamarAdividir(){
      
    int a 2;
      
    int b 0;
      
    //El método dividir lanza una excepción de tipo Exception, así que si lo quieres manejar, pones un catch para ese tipo. Puedes tener varios catch, cada uno con un tipo diferente, ya que un método puede retornar más de un tipo de excepción, aunque dividir solo retorna uno.

      
    try{
         
    int resultado dividir(ab)
      }catch(
    Exception exc){
         
    System.out.println("ocurrió un error, pero ha sido manejado y se sigue con el programa.");
      }

        
    System.out.println("....y seguimos");
        
    System.out.println("....y seguimos");
    }
    En tu ejemplo, el código que está dentro del try lanzará una excepción(si ocurre un error: por ejemplo el servicio de mysql esta apagado, el usuario /contraseña es inválido, etc) de tipo SQLException por eso el catch maneja uno de ese tipo.
    Pero no solo existe el try/catch, tambien try/finally y try/catch/finally.He omitido muchas cosas ya que el tema es más largo, en google hay bastante info sobre excepciones. En la documentación de java del sitio de oracle está muy claro (aunque en inglés),mejor explicado que lo que he visto en muchas páginas. Te recomiendo buscar: uso de excepciones en Java.
     
    A Jonaaaa le gustó este mensaje.