Actualmente estoy trabajando con JSP, y con MYSQL. Estoy realizando un sistema WEB de Activos Fijos, ya casi esta terminado, y funciona correctamente, solo que tengo una duda, sobre las conexiones a BD.
Tengo una clase genérica para conectarme a la bd.
Código:
Esa clase, la utilizo para conectarte, cada vez que quiero hacer algo sobre la BD.package saaf; import java.sql.*; /** * Clase que permite conectar con la base de datos */ public class DbConnection { // Constantes globales de la clase /* Se declaran constantes, porque van a ser siempre los mismos valores cada vez que se vaya a crear un objeto de tipo DbConnection */ static String bd = "nameDataBase"; static String login = "root"; static String password = "mypassword"; static String url = "jdbc:mysql://localhost/" + bd; // Esta variable va a guardar la conexion Connection conn = null; /** Constructor de DbConnection * Se llama constructor porque tiene el mismo nombre que la clase y cuando se crea un nuevo objeto de esta clase * es como se va a inicializar al crear un nuevo objeto de este tipo * */ public DbConnection() { try { //obtenemos el driver para mysql Class.forName("com.mysql.jdbc.Driver"); //obtenemos la conexión conn = DriverManager.getConnection(url,login,password); // Si conn no es nulo, significa que si se pudo conectar if (conn!=null) { System.out.println("Conección a base de datos " + bd + " OK"); } } catch(SQLException e) // Excepcion ocurrida por la conexion { System.out.println("Excepcion conexion."); System.out.println(e); } catch(ClassNotFoundException e) // Excepcion ocurrida por no encontrar el driver { System.out.println("Excepcion driver."); System.out.println(e); } } /**Permite retornar la conexión*/ public Connection getConnection() { return conn; } // Quitamos de memoria la conexion public void desconectar() { if (conn != null) { try { System.out.println("Desconectado de " + bd + " OK"); conn.close(); } catch (SQLException e) { System.out.println(e); } } } }
Un ejemplo de como la utilizo:
Código:
Como pueden ver, en mis clases donde hago algo con la BD, tengo metodos, y en cada metodo, como pueden ver, me abro una conexion a la bd, hago in insert, select, delete, update, y en el mismo metodo, cierro la conexion a la BD, eso es en cada metodo.package saaf; import java.sql.*; import saaf.Blame.*; import saaf.DbConnection; public class Mueble { public Mueble() { /** Constructor de Mueble * Lo primero que va a hacer esta clase, es crear un nuevo objeto de tipo conexion a la base de datos * por medio de la clase DbConnection * */ //cn = new DbConnection(); } // Metodo para cambiar el estatus de los bienes muebles public void cambiarEstatus(int id_mueble,int id_estatus,int id_acceso) { int registros = 0; try { DbConnection cn = new DbConnection(); Statement stm = cn.getConnection().createStatement(); stm.executeUpdate("BEGIN"); stm.executeUpdate("delete from acceso_tmp"); stm.executeUpdate("insert into acceso_tmp (ID_ACCESO) values ("+id_acceso+")"); stm.executeUpdate("update muebles set ID_ESTATUS="+id_estatus+ " where ID_MUEBLE="+id_mueble); stm.executeUpdate("delete from acceso_tmp"); stm.executeUpdate("COMMIT"); stm.close(); cn.desconectar(); } catch(SQLException e) { System.out.println(e); } } public void OtroMetodoDelaClase(parametros) { int registros = 0; try { DbConnection cn = new DbConnection(); Statement stm = cn.getConnection().createStatement(); stm.executeUpdate("BEGIN"); stm.executeUpdate("delete from acceso_tmp"); stm.executeUpdate("COMMIT"); stm.close(); cn.desconectar(); } catch(SQLException e) { System.out.println(e); } } }
Mi Pregunta es, es correcto como le hago, es decir conectarme y desconectarme a la bd por cada operacion que hago, o serie mejor abrir una sola conexion, y cerrarla con la sesion WEB de la aplicacion, o alguna otra opcion.
Me gustaria que algun experto, me resolviera esa enorme duda que siempre he tenido con los sistemas WEB.
Saludos,