Ver Mensaje Individual
  #4 (permalink)  
Antiguo 17/03/2015, 17:50
Avatar de apomaresa
apomaresa
 
Fecha de Ingreso: marzo-2015
Mensajes: 5
Antigüedad: 9 años, 2 meses
Puntos: 0
Respuesta: Consulta Pool de conexiones Java

Gracias por sus respuestas ahora me queda un poco mas claro cuando utilizar cada forma.

Termine optando por la opción 1, lo que hice fue crear una clase java(SQLexe.java) que se encargue de recibir el datasource mediante la función initContext.lookup("java:/comp/env/jdbc/ConexionMySQL"), obtener una conexión y ejecutar sobre esta las consultas SQL.

Pero sigo creando instancias de esta clase (SQLexe.java) para poder ejecutar las consultas, me pregunto si eso estará bien??.

Me explico si necesito ejecutar un SQL en un Servlet, creo una instancia de SQLexe.java y sobre esta ejecuto las consultas.

Código:
package Modelo;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.HashMap;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.sql.DataSource;

/**
 *
 * @author Abel Pomares Agamez
 */

public class SQLexe {

    private Context initContext;
    private Statement st = null;
    private ResultSet rs = null;
    private DataSource dataSource;

    public SQLexe() {
        Conectar();
    }

    public void Conectar() {

        try {

            initContext = new InitialContext();
            dataSource = (DataSource) initContext.lookup("java:/comp/env/jdbc/ConexionMySQL");

        } catch (Exception e) {
            System.out.print("Error al conectar.");
        }
    }

    
    public boolean insertar(String SQL) throws Exception {
        
        Connection conexion = null;
        boolean s = false;
        try {

           
            conexion = dataSource.getConnection();
           
            if (conexion != null) {

                Statement ps = conexion.createStatement();
                ps.executeUpdate(SQL);
                s = true;
            } else {
                s = false;
            }
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            liberaConexion(conexion);
        }
        return s;
    }
    
    public ArrayList consultar(String consulta) {
        Connection conexion = null;
        ArrayList results = new ArrayList();
        try {
            conexion = dataSource.getConnection();
            Statement sentencia = conexion.createStatement();
            rs = sentencia.executeQuery(consulta);

            ResultSetMetaData md = rs.getMetaData();
            int columns = md.getColumnCount();
            

            while (rs.next()) {
                HashMap row = new HashMap();
                results.add(row);

                for (int i = 1; i <= columns; i++) {
                    row.put(md.getColumnName(i), rs.getObject(i));
                }
            }
            
        } catch (SQLException e) {
            System.out.println("Error en la consulta: " + e);
        } finally {

            liberaConexion(conexion);
        }
    return results;
    }

    private void liberaConexion(Connection conexion) {
        try {
            if (null != conexion) {
// En realidad no cierra, solo libera la conexion.
                conexion.close();
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }


}