9. SQL y Java con la base de datos

Estos anteriores ejemplos, los hemos creado en una sola clase y todo dentro del metodo "main". Pero realmente, si tenemos varias clases y en varias de estas clases, tenemos que utilizar la conexion a la base de datos, esto resulta un poco tedioso tener que estar escribiendo el codigo para la conexion a la base de datos, y luego si tenemos que hacer una rectificacion de la conexion, tenemos que rectificar todas las clases en las que hemos hecho la conexion.

Para simplificar este codigo, lo que hacemos es crear una sola clase en la que unicamente implementaremos un metodo que contenga la conexion a la base de datos, de este modo, simplemente tendremos que importar dicho metodo a la clase que necesitemos.

 

Vamos a hacer un ejemplo, pero desde la misma clase, para que veas como importar el metodo de conexion.

Creamos dentro dentro de la clase y fuera del "main", la conexion a la base de datos. Ademas, instanciaremos "Connection", "Statement" y "ResultSet" fuera del metodo que vamos a crear para la conexion, esto quedaria asi:

 

import java.sql.*;

public class Operarios{

 

    private Connection conexion = null;

    private Statement st = null;

    private ResultSet rs = null;

 

    public void Conectar(){

        try{

            Class.forName("com.mysql.jdbc.Driver");

            String ruta = "jdbc:mysql://localhost:3306/minicursojava";

            conexion = DriverManager.getConnection(ruta, "root", "root");

            st = conexion.createStatement();

        }catch(Exception ex){

            System.out.println("Ha habido un fallo en la conexion a la BD : "+ex.getMessage());

        }

    }

    

    public static void main(String[]args){

        

    }

}

 

Ahora, nos quedaria desde el metodo "main" hacer una instancia de la clase y traer los objetos que necesitemos.

Imaginemos que hacemos el ejercicio del tema anterior sobre recuperar registros de una tabla y esto quedaria asi:

 

import java.sql.*;

public class Operarios{

 

    private Connection conexion = null;

    private Statement st = null;

    private ResultSet rs = null;

 

    public void Conectar(){

        try{

            Class.forName("com.mysql.jdbc.Driver");

            String ruta = "jdbc:mysql://localhost:3306/minicursojava";

            conexion = DriverManager.getConnection(ruta, "root", "root");

            st = conexion.createStatement();

        }catch(Exception ex){

            System.out.println("Ha habido un fallo en la conexion a la BD : "+ex.getMessage());

        }

    }

    

    public static void main(String[]args){

        Operarios op = new Operarios();

        try{
            
            op.Conectar();
            
            String sql = "SELECT nombre, sueldo FROM tablacurso";
            op.rs = op.st.executeQuery(sql);
            
            while(op.rs.next()){
                System.out.println("Nombre: "+op.rs.getString("nombre")+" | Sueldo: "+op.rs.getString("sueldo"));
            }
            
            
            
        }catch(Exception ex){
            System.out.println("Ha habido un fallo en la conexion a la BD : "+ex.getMessage());
        }finally{
            try{
                op.conexion.close();
                op.st.close();
                op.rs.close();
            }catch(Exception ex){}
        }

    }

}

 
Esto haria lo mismo que hemos hecho en el ejercicio del tema anterior, la diferencia es que ahora la conexion la podemos transportar a las clases que nosotros queremos.
Si te fijas, en rojo te he marcado la sentencia "finally", esto en el mini-curso anterior, te lo comente pero no te explique cual era su funcionalidad.
sabemos que con el "try" nos indicaba que java intentara hacer lo que hay dentro, pero si no funcionaba lo que hay en el "try", pues pasara al "catch", pero hiciera una cosa u otra, obligatoriamente le indicamos que lo que hay en "finally" lo tenga que hacer forzosamente.
Por eso, ponemos el cierre de flujo de datos en el "finally", de este modo ocurra lo que ocurra, esto se realizara.