entre Desarrolladores

Recibe ayuda de expertos

Registrate y pregunta

Es gratis y fácil

Recibe respuestas

Respuestas, votos y comentarios

Vota y selecciona respuestas

Recibe puntos, vota y da la solución

Pregunta

2votos

Registro usuarios JSP con MySQL

Buenas noches compañeros, estoy haciendo una web para ir practicando porque a finales de este mes empiezo las prácticas en J2EE, me ha surgido un problema que no soy capaz de ver donde da el fallo y me gustaría contar con su ayuda:

Pongo la información y luego explico en detalle el problema:

Archivo Registro.java (Servlet)

protected void processRequest(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        Consultas con = new Consultas();
        try{
            String dni = request.getParameter("dni");
            String pass = request.getParameter("pass");
            String email = request.getParameter("email");
            String nUsuario = request.getParameter("nombre");

            if(!dni.equals("") && !pass.equals("")){
                ConexionDB.rs = con.RegistroUsuario(dni, pass, nUsuario, email);
                if (ConexionDB.rs.next()){
                    // Si se ha registrado correctamente procedo al logueo de esa sesión
                    ConexionDB.rs = con.Autenticacion(dni, pass);
                    if (ConexionDB.rs.next()){
                        dni = ConexionDB.rs.getString("dni");
                        pass = ConexionDB.rs.getString("Password");
                        Login login = new Login();
                        login.setUsuario(dni);
                        login.setClave(pass);
                        acceso.add(login);
                        for(int i=0; i<acceso.size();i++){
                            if(acceso.get(i).getUsuario().equals(dni) && acceso.get(i).getClave().equals(pass)){
                                HttpSession sessionok = request.getSession();
                                sessionok.setAttribute(dni, pass);
                                response.sendRedirect("menu.jsp");
                            } else {
                                response.sendRedirect("loginweb.jsp?error=error en el login");
                            }
                        }
                    }
                } else {
                    response.sendRedirect("loginweb.jsp?error=error en el registro");
                }
            }
        }catch(SQLException | IOException e){
            response.sendRedirect("loginweb.jsp?error=Nombre de Usuario y/o Clave Incorrecto");
        }
    }

Archivo Consulta.java

public class Consultas extends ConexionDB{

    public ResultSet RegistroUsuario(String dni, String pass, String nombre, String email) throws SQLException {
        Statement st = conex.createStatement();
        try {
            String cadSQL = "INSERT INTO `usuarios` (`DNI`, `Password`, `Nombre`, `email`)"
                    + " VALUES ('"+ dni +"','"+ pass +"','"+ nombre +"','"+ email +"');";
            rs = st.executeQuery(cadSQL);
        } catch (SQLException e) {
            System.out.print(e);
        } finally {
            //conex.close();
        }
        return rs;
    }
}

Archivo loginweb.jsp

<div id="registro">
                        <h1><center>Registro Web</center></h1>
                        <form action="Registro" method="post">
                            <table border="0">
                                <tr>
                                    <td>Nombre de Usuario: </td><td><input type="text" name="nombre" id="nombre" /></td>
                                </tr>
                                <tr>
                                    <td>DNI: </td><td><input type="text" name="dni" id="dni" /></td>
                                </tr>
                                <tr>
                                    <td>Correo electrónico: </td><td><input type="text" name="email" id="email" /></td>
                                </tr>
                                <tr>
                                    <td>Contaseña: </td><td><input type="password" name="pass" id="pass" /></td>
                                </tr>
                            </table>
                            <input type="submit" name="Entrar" id="Entrar" />
                        </form>
                    </div>

Pues bien, al ejecutar el form del jsp para proceder al insert del nuevo usuario y mas adelante, proceder a su logueo de sesión, el error me lo da en la línea rs = st.executeQuery(cadSQL); que recibe un null...he probado la SQL para ver si ese era el problema pero no es asi, ya que, al ejecutar la query dentro del panel phpmyadmin donde tengo la BD MySQL, la sentencia se ejecuta correctamente. He hecho un debug, y me da la impresión que no ejecuta la SQL, no se si estoy en lo cierto pero me gustaría saber su opinión y su solución :)

Muchas gracias por su ayuda :D

1 Respuesta

2votos

Javi2EE Puntos6630

Buenas Yesod, las sentencias INSERT, UPDATE, DELETE y todas aquellas que no devuelven resultados se ejecutan con executeUpdate.
Esta función devuelve un int que es el numero de lineas afectadas por la consulta

int lineasAfectadas = st.executeUpdate(cadSQL);

Si además quieres que te devuelva la id generada añade esto:

int lineasAfectadas = st.executeUpdate(cadSQL , Statement.RETURN_GENERATED_KEYS);
ResultSet rs = st.getGeneratedKeys();
Long id;
if(rs.next()){
    id = rs.getLong(1);
}

Con esto y el bloque catch SQLException podrás controlar que debes devolver.
Un saludo

0voto

Yesod comentado

¿Y como hago para retornar un true o un false?

0voto

Javi2EE comentado

He ampliado un poco la respuesta, espero que te sirva

0voto

Yesod comentado

Muchísimas gracias amigo :)

Por favor, accede o regístrate para responder a esta pregunta.

Otras Preguntas y Respuestas


...

Bienvenido a entre Desarrolladores, donde puedes realizar preguntas y recibir respuestas de otros miembros de la comunidad.

Conecta