Consultas SQL dinámicas en Java

   Una de las pocas cosas que se hacen al momento de programar es optimizar las consultas, crear un método que devuelva el valor de la consulta es lo mas importante al momento de programar. Lo ideal es establecer la conexión con la base de datos, almacenarla en una variable para luego crear la conexión al momento de realizar la consulta, de esta manera podemos hacer miles de consultas utilizando solo un método.

   Por ejemplo, supongamos que queremos consultar (tomando como SGBD MySQL) la cantidad de registros en una tabla cualquiera, entonces tenemos algo como esto en nuestro código:
Class.forName("com.mysql.jdbc.Driver");
Connection conexion = DriverManager.getConnection ("jdbc:mysql://localhost/mi_bd","root", "mi_clave");
Statement stat = conexion.createStatement();
ResultSet resultado = stat.executeQuery ("SELECT * FROM mi_tabla");
while (resultado.next()) {
    System.out.println (resultado.getString("Mi_Campo"));
}
conexion.close();
   Y si queremos hacerlo en otra tabla ¿volvemos a hacer lo mismo?, vamos que no es la idea. Para ello hagamos unos pequeños cambios, creemos una clase llamada por ejemplo "clase_bd", a la cual accedemos solo si necesitamos almacenar, actualizar o consultar registros de nuestra base de datos. Para ello entonces declaramos la clase pública junto con sus métodos:
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import javax.swing.JOptionPane;

public class clase_bd {

    static Connection conn = null;
    static ResultSet consulta = null;

    public static void abrir_bd(){
        try {
            Class.forName("com.mysql.jdbc.Driver");
            conn=DriverManager.getConnection("jdbc:mysql://servidor/bd", "usuario", "pass");
        } catch (SQLException ex) {
            JOptionPane.showMessageDialog(null, "Verifique que los parametros de conexión sean los correctos. n"+ex,"Error",JOptionPane.ERROR_MESSAGE);
            System.exit(0);
        } catch (ClassNotFoundException ex) {
            JOptionPane.showMessageDialog(null, "No es posible inicializar el sistema: "+ex,"Error",JOptionPane.ERROR_MESSAGE);
            System.exit(0);
        }
    }
 
    public static ResultSet consulta (String peticion){
        try {
            Statement stat = conn.createStatement();
            consulta = stat.executeQuery(peticion);
        } catch (SQLException ex) {
            JOptionPane.showMessageDialog(null, "Error al realizar la consulta: "+ex,"Error",JOptionPane.ERROR_MESSAGE);
        } return consulta;
    }
    

    public static void registrar (String peticion){
        try {
            Statement stat = conn.createStatement();
            stat.executeUpdate(peticion);
        } catch (SQLException ex) {
            JOptionPane.showMessageDialog(null, "Error al almacenar el registro: "+ex,"Error",JOptionPane.ERROR_MESSAGE);
        }
    }
}
   Lo que hacemos es simple, creamos un método de consulta, otro de registro y otro de conexión. Al de consulta se le envía por valor una cadena, la cual procesara y retornará el valor deseado; mientras que al de registro se le envía la cadena SQL y no devuelve ningún valor, solo ejecuta la sentencia y listo. Una vez que tenemos la clase construida, la llamamos en nuestro método principal para iniciar las variables de conexión:
public class programa {
    public static void main(String [] args){
            clase_bd.abrir_bd();
    }
}
   Entonces ya solo nos queda llamar al método de la clase para obtener los resultados deseados, por ejemplo, para consultar "X" campo de nuestra base de datos:
ResultSet consulta = clase_bd.consulta("SELECT campos FROM tabla");
while (consulta.next()){
    System.out.println(consulta.getString(1));
}
   Para almacenar un registro:
clase_bd.registrar("INSERT INTO tabla VALUES (valores)");
JOptionPane.showMessageDialog(null, "Registro Almacenado","Prueba...",JOptionPane.INFORMATION_MESSAGE);

4 Comentarios

Escribir Comentario
Anónimo
AUTOR
16 de noviembre de 2011, 1:37 delete

Buen blog!!!!!
Analizando....

Responder
avatar
Anónimo
AUTOR
22 de noviembre de 2011, 12:43 delete

carlitos exelente tu blog, voy a pasarme dias aprendiendo todo el material que pusiste sobre java y los demas.
gracias por tomarte el tiempo de publicarlos.
como dijiste que si hay algo que no esta publicado o preguntar, muy pronto te hare llegar mis dudas.
saludos desde Peru.

Responder
avatar
Anónimo
AUTOR
1 de junio de 2012, 12:58 delete

Chido carnal
mmm Ocupo como hacer una consulta con un Combo box en MySql.... Esp me ayudaria mucho Gracias
Buen blog

Responder
avatar

Lamentablemente hay muchos usuarios en la red que han llegado al blog para escribir obscenidades, así que la moderación se hace necesaria. Recuerda utilizar un lenguaje correcto y espera a que sea aprobado.

Si necesitas publicar código haz click en "Conversión" para hacerlo legible.
ConversiónConversión EmoticonEmoticon