jueves, 22 de marzo de 2012

Tutorial : Crear nuestra clase para manejo de nuestra base de datos - Parte 2



Si ya sé que existe hibernate, toplink, eclipse-link y mas implementaciones de ORM's, pero este no es un ORM es simplemente una clase para manejar nuestras consultas SQL sin complicarnos tanto.

Aparte me permite explicarles el Patron Singleton y aprovechar una funcionalidad de la librería H2 que es el pool de conexiones.



  1. Creamos nuestro paquete denominado util y dentro db, entonces tendremos algo asi (he cambiado el nombre del paquete raiz a blog.dairdev.minitienda previamiente, pero esto no influye demasiado)

     

  2. Dentro de db creamos nuestra clase denominada H2Util




Con esta clase manejaremos nuestras conexiones a la base de datos y la ejecución de los querys.
Vamos a utilizar el Patron Singleton, que este caso nos va a permitir tener una sola instancia de esta clase para todo el tiempo de vida de la aplicación.

Para eso implementamos el siguiente codigo :

public class H2Util {

    //Implementamos el patron Singleton
    static private H2Util INSTANCE = null;

    // creador sincronizado para protegerse de posibles problemas  multi-hilo
    // otra prueba para evitar instanciación múltiple
    private synchronized static void createInstance() {
        if (INSTANCE == null) {
            INSTANCE = new H2Util();
        }
    }

    public static H2Util getInstance() {
        if (INSTANCE == null) {
            createInstance();
        }
        return INSTANCE;
    }       
}
Crearemos nuestro método para abrir conexiones.
private void conectar() {
        try {
            Class.forName(DRIVER).newInstance();
            //si no existe el pool de conexiones crea uno
            if (pool == null) {
                pool = JdbcConnectionPool.create("jdbc:h2:" + DB_URL, "sa", "sa");
            }
        } catch (ClassNotFoundException ex) {
            Logger.getLogger(H2Util.class.getName()).log(Level.SEVERE, null, ex);
        } catch (InstantiationException ex) {
            Logger.getLogger(H2Util.class.getName()).log(Level.SEVERE, null, ex);
        } catch (IllegalAccessException ex) {
            Logger.getLogger(H2Util.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    /**
     * Abre la coneccion si no ha sido creada previamente
     * retorna un objecto connection
     */
    public Connection getConnection() throws SQLException {
       if (pool == null) {
            conectar();
        }
        return pool.getConnection();
    }

Bueno ahora implementaremos algunos métodos públicos que nos será útiles.
/**
     * retorna un objeto PreparedStatement utilizando una nueva conexion
     */
    public PreparedStatement getPreparedStatement(String query) throws SQLException {
        return H2Util.getInstance().getConnection().prepareStatement(query);
    }

    /**
     * retorna un objeto ResultSet basado en un PreparedStatement de acuerdo al query pasado
     */
    public ResultSet getResultSet(String query) throws SQLException {
        return H2Util.getInstance().getPreparedStatement(query).executeQuery();
    }

    /**
     * ejecuta un query tipo INSERT, UPDATE o DELETE
     */
    public void execute(String query) throws SQLException {
        PreparedStatement psmt = H2Util.getInstance().getPreparedStatement(query.toString());
        //Este metodo es que se debe llamar en caso de ejecutar INSERT, UPDATE o DELETE
        psmt.executeUpdate();
        //cerramos el psmt y su conexion
        psmt.close();
        psmt.getConnection().close();
    }

Viene de :

Creacion de Aplicación Java J2SE Swing con Netbeans IDE 7

No hay comentarios:

Publicar un comentario

 
Powered by Blogger