Ver Mensaje Individual
  #1 (permalink)  
Antiguo 19/01/2009, 11:35
tinajeroivan
 
Fecha de Ingreso: enero-2009
Mensajes: 3
Antigüedad: 15 años, 4 meses
Puntos: 0
Duda sobre conexion a BD en Sistemas WEB

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,