vendredi 18 juin 2021

How to fix java.lang.NullPointerException in my DAO and Servlet class [duplicate]

I'm using Eclipse EE in doing dynamic web project from YT (for practice and school). Every time I run the program, I always get this error "java.lang.NullPointerException" I tried a lot of ways to fix it, but it's still there. Can anyone help me solve this error, please? Thank you.

DAO Class

the error points at this line: PreparedStatement preparedStatement = connection.prepareStatement(SELECT_ALL_TASK);)

and

List listTask = taskDAO.selectAllTask();

//database operations for the table Task in MySQL Database
public class TaskDAO {

    private String jdbcURL = "jdbc:mysql://localhost:3306/taskmanager?useSSL=false";
    private String jdbcUsername = "root";
    private String jdbcPassword = "DataPass";
    
    private static final String INSERT_TASK_SQL = "INSERT INTO task" + "  (name, desc1, due) VALUES "
            + " (?, ?, ?);";

    private static final String SELECT_TASK_BY_NUM = "select num,name,desc1,due from task where num =?";
    private static final String SELECT_ALL_TASK = "select * from task";
    private static final String DELETE_TASK_SQL = "delete from task where num = ?;";
    private static final String UPDATE_TASK_SQL = "update task set name = ?,desc1= ?, due =? where num = ?;";
    
    //connection to the database
    protected Connection getConnection() {
        Connection connection = null;
        try {
            Class.forName("com.mysql.jdbc.Driver");
            connection = DriverManager.getConnection(jdbcURL, jdbcUsername, jdbcPassword);
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (ClassNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return connection;
    }
    
    //create and insert new task
    
    public void insertTask(Task task) {
        try (Connection connection = getConnection();
            PreparedStatement preparedStatement = connection.prepareStatement(INSERT_TASK_SQL)){
            
            preparedStatement.setString(1, task.getName());
            preparedStatement.setString(2, task.getDesc1());
            preparedStatement.setString(3, task.getDue());
            
            preparedStatement.executeUpdate();
        }catch (Exception e) {
            e.printStackTrace();
        }
    }
    
    //update a task
    
    public boolean updateTask(Task task) throws SQLException {
        boolean rowUpdated;
        try (Connection connection = getConnection();
                PreparedStatement statement = connection.prepareStatement(UPDATE_TASK_SQL);) {
            statement.setString(1, task.getName());
            statement.setString(2, task.getDesc1());
            statement.setString(3, task.getDue());
            statement.setInt(4, task.getNum());

            rowUpdated = statement.executeUpdate() > 0;
        }
        return rowUpdated;
    }

    
    //select task by num(PK)
    
    public Task selectTask(int num) {
        Task task = null;
        // establish connection
        try (Connection connection = getConnection();
                
                // create statement
                PreparedStatement preparedStatement = connection.prepareStatement(SELECT_TASK_BY_NUM);) {
            preparedStatement.setInt(1, num);
            System.out.println(preparedStatement);
            
            // execute query
            ResultSet rs = preparedStatement.executeQuery();

            // process the resultset
            while (rs.next()) {
                String name = rs.getString("name");
                String desc1 = rs.getString("desc1");
                String due = rs.getString("due");
                task = new Task(num, name, desc1, due);
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return task;
    }

    //select all task
    
    public List<Task> selectAllTask() {
        List<Task> tasks = new ArrayList<>();
        // establish connection
        try (Connection connection = getConnection();
                
                // create statement
                PreparedStatement preparedStatement = connection.prepareStatement(SELECT_ALL_TASK);) {
        
            System.out.println(preparedStatement);
            
            // execute query
            ResultSet rs = preparedStatement.executeQuery();

            // process the resultset
            while (rs.next()) {
                int num = rs.getInt("id");
                String name = rs.getString("name");
                String desc1 = rs.getString("desc1");
                String due = rs.getString("due");
                tasks.add(new Task(num, name, desc1, due));
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return tasks;
    }
    
    
    //delete a task
    
    public boolean deleteTask(int num) throws SQLException {
        boolean rowDeleted;
        try (Connection connection = getConnection();
                PreparedStatement statement = connection.prepareStatement(DELETE_TASK_SQL);) {
            statement.setInt(1, num);
            rowDeleted = statement.executeUpdate() > 0;
        }
        return rowDeleted;
    }
    
}

this is my Servlet class:


/**
 * Servlet implementation class TaskServlet
 */
@WebServlet("/")
public class TaskServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;
    private TaskDAO taskDAO;
       
   
    public TaskServlet() {
        this.taskDAO = new TaskDAO();
        
        
    }

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        this.doGet(request, response);
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    
        String action = request.getServletPath();
        
        switch (action) {
        case "/new":
            showNewForm(request, response);
            break;
        case "/insert":
            
            try {
                insertTask(request, response);
            } catch (SQLException e4) {
                // TODO Auto-generated catch block
                e4.printStackTrace();
            } catch (IOException e4) {
                // TODO Auto-generated catch block
                e4.printStackTrace();
            }
            
            break;
        case "/delete":
            
            try {
                deleteTask(request, response);
            } catch (SQLException e3) {
                // TODO Auto-generated catch block
                e3.printStackTrace();
            } catch (IOException e3) {
                // TODO Auto-generated catch block
                e3.printStackTrace();
            }
            
            break;
        case "/edit":
            try {
                showEditForm(request, response);
            } catch (SQLException e2) {
                // TODO Auto-generated catch block
                e2.printStackTrace();
            } catch (ServletException e2) {
                // TODO Auto-generated catch block
                e2.printStackTrace();
            } catch (IOException e2) {
                // TODO Auto-generated catch block
                e2.printStackTrace();
            }
            
            break;
        case "/update":
            
            try {
                updateTask(request, response);
            } catch (SQLException e1) {
                // TODO Auto-generated catch block
                e1.printStackTrace();
            } catch (IOException e1) {
                // TODO Auto-generated catch block
                e1.printStackTrace();
            }
            
            break;
        default:
            
            try {
                listTask(request, response);
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (ServletException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            
            break;
        
        }

    }
    
    //for "/new" request
    private void showNewForm(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        RequestDispatcher dispatcher = request.getRequestDispatcher("task-form.jsp");
        dispatcher.forward(request, response);
    }
    
    //for "/insert" request
    private void insertTask(HttpServletRequest request, HttpServletResponse response) 
            throws SQLException, IOException {
        String name = request.getParameter("name");
        String desc1 = request.getParameter("desc1");
        String due = request.getParameter("due");
        Task newTask = new Task(name, desc1, due);
        taskDAO.insertTask(newTask);
        response.sendRedirect("list");
    }
    
    //for "/delete" request
    private void deleteTask(HttpServletRequest request, HttpServletResponse response) 
            throws SQLException, IOException {
        int num = Integer.parseInt(request.getParameter("num"));
        taskDAO.deleteTask(num);
        response.sendRedirect("list");

    }
    //for "/edit" request
    private void showEditForm(HttpServletRequest request, HttpServletResponse response)
            throws SQLException, ServletException, IOException {
        int num = Integer.parseInt(request.getParameter("num"));
        Task existingTask = taskDAO.selectTask(num);
        RequestDispatcher dispatcher = request.getRequestDispatcher("task-form.jsp");
        request.setAttribute("task", existingTask);
        dispatcher.forward(request, response);

    }
    //for "/update" request
    private void updateTask(HttpServletRequest request, HttpServletResponse response) 
            throws SQLException, IOException {
        int num = Integer.parseInt(request.getParameter("num"));
        String name = request.getParameter("name");
        String desc1 = request.getParameter("desc1");
        String due = request.getParameter("due");

        Task book = new Task(num, name, desc1, due);
        taskDAO.updateTask(book);
        response.sendRedirect("list");
    }
    
    private void listTask(HttpServletRequest request, HttpServletResponse response)
            throws SQLException, IOException, ServletException {
        List<Task> listTask = taskDAO.selectAllTask();
        request.setAttribute("listTask", listTask);
        RequestDispatcher dispatcher = request.getRequestDispatcher("task-list.jsp");
        dispatcher.forward(request, response);
    }
}
    



Aucun commentaire:

Enregistrer un commentaire