I miss the CRUD code

1

When I execute the code to make me delete, update, or addUser, I get a null error in some String, as a user or password.

I show you my MySQL.

SHOW CREATE TABLE 'curso'.'usuarios';

id, user, name, surname, email, password, type, course.

This is my UserController

package com.User;

import java.io.IOException;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.User.dao.*;
import com.User.dao.UserDAOImplementation;

import sun.misc.Perf.GetPerfAction;

import com.User.User;

@WebServlet("/UserController")
public class UserController extends HttpServlet {

    private UserDAO dao;
    private static final long serialVersionUID = 1L;
    public static final String lIST_USER = "/listUser.jsp";
    public static final String INSERT_OR_EDIT = "/user.jsp";

    public UserController() {
        dao = new UserDAOImplementation();
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        String forward = "";
        String action = request.getParameter( "action" );

        if( action.equalsIgnoreCase( "delete" ) ) {
            forward = lIST_USER;
            String usuario= (request.getParameter("usuairo")) ;
            dao.deleteUser(usuario);
            request.setAttribute("user", dao.getAllUser() );
        }
        else if( action.equalsIgnoreCase( "edit" ) ) {
            forward = INSERT_OR_EDIT;
            String usuario = ( request.getParameter("usuario") );
            User user = dao.getUserById(usuario);
            request.setAttribute("User", user);
        }
        else if( action.equalsIgnoreCase( "insert" ) ) {
            forward = INSERT_OR_EDIT;
        }
        else {
            forward = lIST_USER;
            request.setAttribute("user", dao.getAllUser() );
        }
        RequestDispatcher view = request.getRequestDispatcher( forward );
        view.forward(request, response);
    }

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        User user = new User();
        user.setUsuario( request.getParameter( "usuario" ) );
        user.setNombre( request.getParameter( "nombre" ) );
        user.setApellidos( request.getParameter( "apellidos" ) );
        user.setEmail( request.getParameter( "email" ) ) ;
        user.setPassword( request.getParameter( "password" ) ) ;
        user.setTipo( request.getParameter( "tipo" ) ) ;
        user.setCurso( request.getParameter( "curso" ) ) ;      
        String id = request.getParameter("id");

        if( id == null || id.isEmpty() ) 
            dao.addUser(user);
        else {


            dao.updateUser(user);
        }
        RequestDispatcher view = request.getRequestDispatcher( lIST_USER );
        request.setAttribute("user", dao.getAllUser());
        view.forward(request, response);
    }
}

User

package com.User;

import java.util.List;

public class User {

    private int id;
    private String usuario;
    private String nombre;
    private String apellidos;
    private String password;
    private String email;
    private String tipo;
    private String curso;

    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public String getUsuario() {
        return usuario;
    }
    public void setUsuario(String usuario) {
        this.usuario= usuario;
    }
    public String getNombre() {
        return nombre;
    }
    public void setNombre(String nombre) {
        this.nombre = nombre;
    }
    public String getApellidos() {
        return apellidos;
    }
    public void setApellidos(String apellidos) {
        this.apellidos = apellidos;
    }
    public String getPassword() {
        return password;
    }
    public void  setPassword(String password){
        this.password = password;
    }
   public String getEmail() {
        return email;
    }
    public void setEmail(String email) {
        this.email = email;
    }
    public String getTipo() {
        return tipo;
    }
    public void setTipo(String tipo) {
        this.tipo = tipo;
    }
    public String getCurso() {
        return curso;
    }
    public void setCurso(String curso) {
        this.curso = curso;
    }

    @Override
    public String toString() {
        return "User [id=" + id + ", usuario=" + usuario + ", nombre=" + nombre
                + ", apellidos=" + apellidos + ",  email="
                + email + ", password=" + password +", tipo="
                + tipo + ",  curso="
                + curso + "]";
    }


    public static List<User> list() {
        // TODO Auto-generated method stub
        return null;
    }
}

And finally my Dao

package com.User.dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;

import com.User.*;
    import com.User.util.DbUtil;



    public class UserDAOImplementation implements UserDAO {

        private Connection conn;

        public UserDAOImplementation() {
            conn = DbUtil.getConnection();
        }
        @Override
        public void addUser( User user ) {
            try {
                String query = "insert into usuarios (usuario, nombre, apellidos, email , password , tipo , curso) values (?,?,?,?,?,?,?)";
        PreparedStatement preparedStatement = conn.prepareStatement( query );
        preparedStatement.setString( 1, user.getUsuario() );
        preparedStatement.setString( 2, user.getNombre() );
        preparedStatement.setString( 3, user.getApellidos() );
        preparedStatement.setString( 4, user.getEmail() );
        preparedStatement.setString(5, user.getPassword());
        preparedStatement.setString(6, user.getTipo());
        preparedStatement.setString(7, user.getCurso());
        preparedStatement.executeUpdate();
        preparedStatement.close();
    } catch (SQLException e) {
        e.printStackTrace();
    }
}
@Override
public void deleteUser( String usuario) {
    try {
        String query = "delete from usuarios where Id=?";
        PreparedStatement preparedStatement = conn.prepareStatement(query);
        preparedStatement.setString(1, usuario);
        preparedStatement.executeUpdate();
        preparedStatement.close();
    } catch (SQLException e) {
        e.printStackTrace();
    }
}
@Override
public void updateUser( User user ) {
    try {
        String query = "update usuarios set usuario=?, nombre=?, apellidos=?, email=? , password=?, tipo=?, curso=?,where id=?";
                    PreparedStatement preparedStatement = conn.prepareStatement( query );
                    preparedStatement.setString( 1, user.getUsuario() );
                    preparedStatement.setString( 2, user.getNombre() );
                    preparedStatement.setString( 3, user.getApellidos() );
                    preparedStatement.setString( 4, user.getEmail() );
                    preparedStatement.setString(5, user.getPassword());
                    preparedStatement.setString(6, user.getTipo());
                    preparedStatement.setString(7, user.getCurso());
                    preparedStatement.setInt(8, user.getId());
                    preparedStatement.executeUpdate();
                    preparedStatement.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
public List<User> getAllUsers() {
    List<User> users = new ArrayList<User>();
    try {

        Statement statement = conn.createStatement();
        ResultSet rs = statement.executeQuery("select * from usuarios");
while (rs.next()) {
    User user = new User();
    user.setId(rs.getInt("id"));
user.setUsuario(rs.getString("usuario"));
user.setNombre(rs.getString("nombre"));
user.setApellidos(rs.getString("apellidos"));
user.setEmail(rs.getString("email"));
user.setPassword(rs.getString("password"));
user.setTipo(rs.getString("tipo"));
user.setCurso(rs.getString("curso"));
            users.add(user);


        }   
    } catch (SQLException e) {
        e.printStackTrace();
    }
    for (int i = 0; i < users.size(); i++) {

    }
    return users;
}


public User getUserById(String usuario) {
    User user = new User();
    try {

        PreparedStatement preparedStatement = conn.
                prepareStatement("select * from usuarios where usuario=?");
preparedStatement.setString(1, usuario);
ResultSet rs = preparedStatement.executeQuery();

if (rs.next()) {
      user.setId(rs.getInt("id"));
  user.setUsuario(rs.getString("usuario"));
  user.setNombre(rs.getString("nombre"));
  user.setApellidos(rs.getString("apellidos"));
  user.setEmail(rs.getString("email"));
  user.setPassword(rs.getString("password"));
  user.setTipo(rs.getString("tipo"));
  user.setCurso(rs.getString("curso"));
        }
    } catch (SQLException e) {
        e.printStackTrace();
    }

    return user;
}
@Override
public List<User> getAllUser() {
    // TODO Auto-generated method stub
    return null;
}

}

It gives me failures of null user.

Why can the code fail me? Right now the update and the addUser do the same to me.

    
asked by Juan Fernandez Szkraba 31.07.2016 в 01:55
source

2 answers

0

I've been reading your code, about the update that fails you is to prepare your query, before the WHERE you have an extra comma. As advice, since you have set up a 'connection' class, I advise you to use some of the automatic preparation of queries, as it is developed: LINK

Check if what you receive in the requests arrives correctly, and the names of the fields in the MySQL tables.

I have adapted your code and corrected the comments, now it is much more readable and less prone to typing and non-technical errors.

public class UserDAOImplementation implements UserDAO {

    public UserDAOImplementation(url, port, database, user, password) {
        if (MySQL.tryConnection(url, port, database, user, password).ping()) {
            System.out.println("Conexión MySQL-JDBC establecida");
        }
    }

    @Override
    public void addUser(User user) {
        String query = "INSERT INTO usuarios (usuario, nombre, apellidos, email , password , tipo , curso) VALUES (?, ?, ?, ?, ?, ?, ?);";
        String[] params = new String[]{
            user.getUsuario(), user.getNombre(), user.getApellidos(), 
            user.getEmail(),user.getPassword(), user.getTipo(), user.getCurso()
        };
        MySQL.insert(query, params, (rowsInserted) -> {
            System.out.println( rowsInserted != 0 ? "addUser - SUCCESS" : "addUser - ERROR" );
        });
    }

    @Override
    public void deleteUser(String usuario) {
        String query = "DELETE FROM usuarios WHERE Id = ?;";
        String[] params = new String[]{ usuario };
        MySQL.delete(query, params, (rowsDeleted) -> {
            System.out.println( rowsDeleted != 0 ? "deleteUser - SUCCESS" : "deleteUser - ERROR" );
        });
    }

    @Override
    public void updateUser(User user) {
        String query = "UPDATE usuarios SET usuario = ?, nombre = ?, apellidos = ?, email = ?, password = ?, tipo = ?, curso = ? WHERE id = ?;";
        String[] params = new String[]{
            user.getUsuario(), user.getNombre(), user.getApellidos(), 
            user.getEmail(),user.getPassword(), user.getTipo(), 
            user.getCurso(), user.getId()
        };
        MySQL.update(query, params, (rowsUpdated) -> {
            System.out.println( rowsUpdated != 0 ? "updateUser - SUCCESS" : "updateUser - ERROR" );
        });
    }

    @Override
    public List<User> getAllUsers() {
        List<User> users;
        String query = "SELECT * FROM usuarios;";
        String[] params = new String[]{};
        MySQL.select(query, params, (resultSet) -> {
            users = new ArrayList<User>();
            while (resultSet.next()) { 
                User user = new User();
                user.setId(rs.getInt("id"));
                user.setUsuario(rs.getString("usuario"));
                user.setNombre(rs.getString("nombre"));
                user.setApellidos(rs.getString("apellidos"));
                user.setEmail(rs.getString("email"));
                user.setPassword(rs.getString("password"));
                user.setTipo(rs.getString("tipo"));
                user.setCurso(rs.getString("curso"));
                users.add(user);
            }
            System.out.println( resultSet != null && !users.isEmpty() ? "getAllUsers - SUCCESS" : "getAllUsers - ERROR" );
        });
        return users;
    }

    @Override
    public User getUserById(String usuario) {
        User user;
        String query = "SELECT * FROM usuarios WHERE usuario = ?;";
        String[] params = new String[]{ usuario };

        MySQL.select(query, params, (resultSet) -> {
            while (resultSet.next()) { 
                user = new User();
                user.setId(rs.getInt("id"));
                user.setUsuario(rs.getString("usuario"));
                user.setNombre(rs.getString("nombre"));
                user.setApellidos(rs.getString("apellidos"));
                user.setEmail(rs.getString("email"));
                user.setPassword(rs.getString("password"));
                user.setTipo(rs.getString("tipo"));
                user.setCurso(rs.getString("curso"));
            }
            System.out.println( resultSet != null && user != null ? "getUserById - SUCCESS" : "getUserById - ERROR" );
        });
        return user;
    }

}
    
answered by 31.07.2016 в 11:17
0

So that you do not have a null or empty value you must validate before performing the execution, here I made some corrections to your DAO:

package com.User.dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;

import com.User.*;
import com.User.util.DbUtil;



    public class UserDAOImplementation implements UserDAO {

        private Connection conn;

        public UserDAOImplementation() {
            conn = DbUtil.getConnection();
        }
        @Override
        public void addUser( User user ) {
            if(user != null && user.getUsuario().trim.equals("")){//Así con cada uno de los demás campos de tu objeto user
                try {
                    String query = "insert into usuarios (usuario, nombre, apellidos, email , password , tipo , curso) values (?,?,?,?,?,?,?)";
                    PreparedStatement preparedStatement = conn.prepareStatement( query );
                    preparedStatement.setString( 1, user.getUsuario() );
                    preparedStatement.setString( 2, user.getNombre() );
                    preparedStatement.setString( 3, user.getApellidos() );
                    preparedStatement.setString( 4, user.getEmail() );
                    preparedStatement.setString(5, user.getPassword());
                    preparedStatement.setString(6, user.getTipo());
                    preparedStatement.setString(7, user.getCurso());
                    preparedStatement.executeUpdate();
                    preparedStatement.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }else{

            }
        }
        @Override
        public void deleteUser( String usuario) {
            if(usuario != null && usuario.trim().equals("")){
                try {
                    String query = "delete from usuarios where Id=?";
                    PreparedStatement preparedStatement = conn.prepareStatement(query);
                    preparedStatement.setString(1, usuario);
                    preparedStatement.executeUpdate();
                    preparedStatement.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }else{

            }
        }
        @Override
        public void updateUser( User user ) {
            if(user != null && user.getUsuario().trim.equals("")){//Así con cada uno de los demás de tu objeto user
                try {
                    String query = "update usuarios set usuario=?, nombre=?, apellidos=?, email=? , password=?, tipo=?, curso=? where id=?";
                    PreparedStatement preparedStatement = conn.prepareStatement( query );
                    preparedStatement.setString( 1, user.getUsuario() );
                    preparedStatement.setString( 2, user.getNombre() );
                    preparedStatement.setString( 3, user.getApellidos() );
                    preparedStatement.setString( 4, user.getEmail() );
                    preparedStatement.setString(5, user.getPassword());
                    preparedStatement.setString(6, user.getTipo());
                    preparedStatement.setString(7, user.getCurso());
                    preparedStatement.setInt(8, user.getId());
                    preparedStatement.executeUpdate();
                    preparedStatement.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
        }

        public List<User> getAllUsers() {
            List<User> users = new ArrayList<User>();
            try {
                Statement statement = conn.createStatement();
                ResultSet rs = statement.executeQuery("select * from usuarios");
                while (rs.next()) {
                    User user = new User();
                    user.setId(rs.getInt("id"));
                    user.setUsuario(rs.getString("usuario"));
                    user.setNombre(rs.getString("nombre"));
                    user.setApellidos(rs.getString("apellidos"));
                    user.setEmail(rs.getString("email"));
                    user.setPassword(rs.getString("password"));
                    user.setTipo(rs.getString("tipo"));
                    user.setCurso(rs.getString("curso"));
                    users.add(user);
                }
            } catch (SQLException e) {
                e.printStackTrace();
            }
            for (int i = 0; i < users.size(); i++) {

            }
            return users;
        }


        public User getUserById(String usuario) {
            User user = new User();
            if(usuario != null && usuario.trim().equals("")){
                try {
                    PreparedStatement preparedStatement = conn.
                    prepareStatement("select * from usuarios where usuario=?");
                    preparedStatement.setString(1, usuario);
                    ResultSet rs = preparedStatement.executeQuery();

                    if (rs.next()) {
                          user.setId(rs.getInt("id"));
                      user.setUsuario(rs.getString("usuario"));
                      user.setNombre(rs.getString("nombre"));
                      user.setApellidos(rs.getString("apellidos"));
                      user.setEmail(rs.getString("email"));
                      user.setPassword(rs.getString("password"));
                      user.setTipo(rs.getString("tipo"));
                      user.setCurso(rs.getString("curso"));
                    }
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
            return user;
        }
        @Override
        public List<User> getAllUser() {
            // TODO Auto-generated method stub
            return null;
        }

}

And in your UserController:

        String action = request.getParameter( "action" );
        if(action != null && !action.trim.equals(""){
            if( action.equalsIgnoreCase( "delete" ) ) {
                forward = lIST_USER;
                //String usuario= (request.getParameter("usuairo")) ;Mal
                String usuario= (request.getParameter("usuario")) ;
                if(usuario != null && !usuario.trim.equals(""){
                    dao.deleteUser(usuario);
                    request.setAttribute("user", dao.getAllUser() );
                }
            }
            else if( action.equalsIgnoreCase( "edit" ) ) {
                forward = INSERT_OR_EDIT;
                String usuario = ( request.getParameter("usuario") );
                if(usuario != null && !usuario.trim.equals(""){
                    User user = dao.getUserById(usuario);
                    request.setAttribute("User", user);
                }
            }
            else if( action.equalsIgnoreCase( "insert" ) ) {
                forward = INSERT_OR_EDIT;
            }
            else {
                forward = lIST_USER;
                request.setAttribute("user", dao.getAllUser() );
            }
        }else{
            //Aquí hacer algo en caso de venir null o vacio
        }
    
answered by 12.04.2017 в 16:26