Foros del Web » Programación para mayores de 30 ;) » Java »

duda general sobre servlets y conexion a base de datos

Estas en el tema de duda general sobre servlets y conexion a base de datos en el foro de Java en Foros del Web. Hola a todos, vereís, estoy aprendiendo servlets y no me queda claro cual es la forma correcta de realizar la conexión a la base de ...
  #1 (permalink)  
Antiguo 30/09/2010, 12:39
 
Fecha de Ingreso: octubre-2008
Ubicación: Plasencia
Mensajes: 109
Antigüedad: 15 años, 6 meses
Puntos: 6
duda general sobre servlets y conexion a base de datos

Hola a todos,
vereís, estoy aprendiendo servlets y no me queda claro cual es la forma correcta de realizar la conexión a la base de datos, por ejemplo, supongamos que tengo un servlet que realiza un login de usuarios contra una bbdd, dónde debería abrir y cerrar la conexión a la base de datos?
- debería hacerlo en el metodo service() (doPost() o doGet()) y que esta operación de apertura y cierre se realice una vez por cada petición al servlet
- o lo correcto sería abrir la conexión en el método init() y cerrarla en el método destroy() y de este modo en cada petición al servlet simplemente utilizar la conexión ya abierta

este es un tema que no me acaba de quedar claro y la verdad es que en los libros y tutoriales que veo no se aclara el tema puesto que los ejemplos que muestran no suelen incluir conexiones a bbdd.
Agradeceré sus opiniones,
saludos.
  #2 (permalink)  
Antiguo 30/09/2010, 14:35
Avatar de cesarazapata  
Fecha de Ingreso: mayo-2010
Ubicación: Bogota
Mensajes: 12
Antigüedad: 13 años, 10 meses
Puntos: 0
Respuesta: duda general sobre servlets y conexion a base de datos

Compañerito te dejo este codigo me que funciona muy bien
Código PHP:
package servlet;
import javax.servlet.*;
import java.io.*;
import java.sql.*;

public class 
valentrada extends HttpServlet {

  public 
void init(ServletConfig conf)
    
throws ServletException {
    
super.init(conf);
  }

  public 
void doGet(HttpServletRequest reqHttpServletResponse res)
    
throws ServletExceptionIOException {
    
     
Connection conexion null;
     
Statement sentencia null;
     
ResultSet resultados null;
     
String usuariof req.getParameter("usuario");//captura el usuario desde el formulario
     
String clavef req.getParameter("clave");//captura la clave desde el formulario


     
String cadenaConexion="jdbc:mysql://localhost/sar";//cadena de conexion
     
String usuario="root"//usuario base de datos
     
String clave="";//clave usuario base de datos
     
res.setContentType("text/html");
     
PrintWriter out res.getWriter();

    try {

    Class.
forName("com.mysql.jdbc.Driver");//registra el driver mysql
    
conexion DriverManager.getConnection (cadenaConexion,usuario,clave);//realiza la conexion
        
sentencia=conexion.createStatement();
    
resultados=sentencia.executeQuery("SELECT * FROM usuarios where usu_login='"+usuariof+"' and usu_contrasena='"+clavef+"'");//ejecuta la consulta 


    
if(resultados.next()) {// si la consulta es valida hace esto
            
                    
String nusuario resultados.getString("usu_nombres");
                    
String ausuario resultados.getString("usu_apellidos");
                    
String loginresultados.getString("usu_login");
                    
HttpSession sesion req.getSession(true);
                   
res.sendRedirect("admin.jsp);
                   }se cierra el if
                    else{hace algo en caso de que no exista el usuario}



    }

    catch (ClassNotFoundException e1) {//coloca las excepciones en caso de errores

        out.println("
ERROR:No encuentro el driver de la BD"+
                e1.getMessage());
    }
    catch (SQLException e2) {

        out.println("
ERROR:Fallo en SQL"+e2.getMessage());
    }
    finally {

        try {
            if (conexion!=null)//cierra la conexion
                conexion.close();
        } catch (SQLException e3) {
            out.println("
ERROR:Fallo al desconectar de la BD"+
                e3.getMessage());
        }

    }

  }

  public void doPost(HttpServletRequest req, HttpServletResponse res)// cierra los metodos
    throws ServletException, IOException {
    doGet(req, res);
  }
}

Espero que te sirva 
  #3 (permalink)  
Antiguo 13/10/2010, 13:53
Avatar de stone_neo  
Fecha de Ingreso: abril-2004
Ubicación: Peru
Mensajes: 438
Antigüedad: 20 años
Puntos: 15
Respuesta: duda general sobre servlets y conexion a base de datos

Lo ideal es que te crees un pool de conexiones a la base de datos y uses eso en lugar de estar abriendo y cerrando conexiones a cada instante. Lo ideal seria que usaras un Data Source que te sea brindado por el Servidor de Aplicaciones, ya que de esta manera dejas que el se encargue de administrar las conexiones.
__________________
Rubén Darío Huamaní Ucharima
Web : http://www.gorilla-soft.com
Usuario Linux #382 100 :-)

Etiquetas: conexion, general, servlet
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 14:00.