Buenas días a todos.
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:
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);
}
}
}
}
Esa clase, la utilizo para conectarte, cada vez que quiero hacer algo sobre la BD.
Un ejemplo de como la utilizo:
Código:
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);
}
}
}
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.
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,