代码之家  ›  专栏  ›  技术社区  ›  Mimine

使用servlet和jsp从SQL表中删除记录

  •  0
  • Mimine  · 技术社区  · 6 年前

    我被困在我的项目中。我有一个学生列表,从中可以看到每个学生的分数,但当我试图删除一个学生的分数时,它不起作用。

    DAO实现:

    public class ResultDaoImplementation implements ResultDAO {
        Connection connection = null;
        public ResultDaoImplementation() {
            connection= connectionWeb.getConnection();
        }
    
        @Override
                 public List<Result> findbyId(long student_id){
                List<Result> results = new ArrayList <> ();
            Result result = null;
            ResultSet resultSet;
            PreparedStatement preparedStatement;
           try { preparedStatement= connection.prepareStatement ("SELECT * FROM  results where student_id=?");
            preparedStatement.setLong(1,student_id);
            resultSet = preparedStatement.executeQuery();
             while (resultSet.next()){
                    result = new Result ();
           result.setStudent_id(resultSet.getLong("student_id"));
           result.setCourse_id(resultSet.getString("course_id"));
           result.setSemester(resultSet.getInt("semester"));
           result.setMarks(resultSet.getInt("marks"));
           result.setMark_id(resultSet.getString("mark_id"));
           results.add(result);}
           resultSet.close();
           preparedStatement.close();}
           catch (SQLException ex){
               ex.printStackTrace();
           }
           return results;   
    }
    
         // Delete method
        public void delete(Result result){
            PreparedStatement preparedStatement;
            String sql="DELETE FROM results WHERE MARK_ID=? AND STUDENT_ID=?";
            try{
                preparedStatement= connection.prepareStatement(sql);
                preparedStatement.setString(1, result.getMark_id());
                preparedStatement.setLong(2, result.getStudent_id());
                preparedStatement.executeUpdate();
                preparedStatement.close();
            }
            catch (SQLException ex){
                ex.printStackTrace();
    
            }}
    

    控制器:

     protected void doGet(HttpServletRequest request, HttpServletResponse response)
                throws ServletException, IOException {
    
            String forward = "";
    
            String action = request.getParameter("action");
            try {
    
                if (action.equalsIgnoreCase("delete")) {
                    String Rtid = request.getParameter("sid");
                long Rstdid = Long.parseLong(Rtid);
                    String rdel = request.getParameter("rmarkid");
                    Result results = new Result();
                    results.setMark_id(rdel);
                    results.setStudent_id(Rstdid);
                    dao2.delete(results);
                    forward = LIST;
                    // forward new info in the list 
                    request.setAttribute("listResult1", dao2.findbyId(Rstdid));
    
                    request.getRequestDispatcher("/listResult.jsp").forward(request, response);
                }
    

    JSP:

    <%@page contentType="text/html" pageEncoding="UTF-8"%>
    <%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
    <!DOCTYPE html>
    <html>
        <head>
            <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
            <title>JSP Page</title>
        </head>
        <body>
         <title> List of Result </title>
    
            <table border="1">
                <thead>
                    <tr>
                        <th>Student ID</th>
                        <th>Course ID</th>
                       <!-- <th>Course Name</th>-->
                        <th>Semester</th>
                        <th> Marks </th>
                        <th> Mark ID </th>
                       <th colspan=2> Action </th>
                    </tr>
                </thead>
                <tbody>
                <c:forEach items="${listResult1}" var="results">
                    <tr>
                    <td><c:out value="${results.student_id}"/></td>
                    <td><c:out value="${results.course_id}"/></td>
                    <td><c:out value="${results.semester}"/></td>
                    <td><c:out value="${results.marks}"/></td>
                     <td><c:out value="${results.mark_id}"/></td>
                    <td> <a href="resultList?action=edit&sid&rmarkid=<c:out value="${results.student_id}"/>">Edit</a>
                    <td> <a href="resultList?action=delete&rmarkid&sid=<c:out value="${results.mark_id}"/>">Delete</a>
                    </tr>
    
                </c:forEach>
            </tbody>
            </table>
         <p> <a href="result.html"> Add new record </a> </p>
        </body>
    </html>
    

    我认为问题在于,我用2个参数删除,只使用1个参数在列表中转发,或者我如何在JSP中编辑操作“delete”

    1 回复  |  直到 6 年前
        1
  •  0
  •   Victor    6 年前

    你通过了 rmarkid 为空且传递的值错误 sid ! 更多关注您的代码。

    这就是您要传递的内容:

    <td> <a href="resultList?action=delete&rmarkid&sid=<c:out value="${results.mark_id}"/>">Delete</a>
    

    这是您应该通过的:

    <td> <a href="resultList?action=delete&rmarkid=<c:out value="${results.mark_id}"&sid=<c:out value="${results.student_id}"/>">Delete</a>