【问题标题】:Delete row from database using Servlet使用 Servlet 从数据库中删除行
【发布时间】:2017-05-23 18:37:11
【问题描述】:

我的 servlet 遇到了关于从数据库中删除记录的问题。请查看我的 servlet 代码并纠正我。

ViewBooksServlet.java servlet 显示数据库中的记录以及每行中的“删除”超链接。但问题是每当我尝试按下删除按钮时.. elseif 循环运行并显示已从 DeleteBooksServlet.java servlet 中删除但数据并未从数据库中删除.. 请指导我如何从 id 中删除数据库中的记录或来自 book_name。

ViewBooksServlet.java

package books;
import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.Statement;
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 javax.servlet.http.HttpSession;

@WebServlet("/viewbook")
public class ViewBooksServlet extends HttpServlet {
private static final long serialVersionUID = 1L;

protected void doGet(HttpServletRequest request, HttpServletResponse  response) throws ServletException, IOException 
{
    PrintWriter out=response.getWriter();
    Connection con=null;
    try {
        Class.forName("com.mysql.jdbc.Driver"); 
        con=DriverManager.getConnection("jdbc:mysql://localhost:3306/books_online","root","");
        Statement stmt=con.createStatement();
        ResultSet rs=stmt.executeQuery("Select * from books");
        out.println("<html><table width='50' border='1'>");
        out.println("<tr><td>Id</td><td>Name</td><td>Author</td><td>Price</td></tr>");

        while(rs.next())
        {
            out.println("<tr><td>"+rs.getInt(1)+"</td><td>"+rs.getString(2)+"</td><td>"+rs.getString(3)+"</td><td>"+rs.getString(4)+"</td><td><a href='deletebook'>Delete</a></td></tr>");
        }
        out.write("</table></html>");

    } catch (ClassNotFoundException | SQLException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}
}

删除BooksServlet.java

package books;

import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

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 javax.servlet.http.HttpSession;

@WebServlet("/deletebook")
public class DeleteBooksServlet extends HttpServlet {
private static final long serialVersionUID = 1L;

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException 
{       
    PrintWriter out=response.getWriter();   
    Connection con=null;
    try {

        String id=request.getParameter("id");
        Class.forName("com.mysql.jdbc.Driver");
        con=DriverManager.getConnection("jdbc:mysql://localhost:3306/books_online","root","root");
        PreparedStatement ps=con.prepareStatement("delete from books where id=?");
        ps.setString(1, id);
        int i=ps.executeUpdate();
        if(i!=0)
        {
            out.println("Deleting rows");
        }
        else if(i==0)
        {
            out.print("deleted");
        }
    } catch (ClassNotFoundException | SQLException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}

}

【问题讨论】:

标签: java mysql database servlets


【解决方案1】:

可能是因为以下几行:

PreparedStatement ps=con.prepareStatement("delete from books where id=?");
ps.setString(1, id);

ViewBooksServlet 的代码看来,idint 而不是String。我会使用setInt 方法而不是setString 按id 删除,例如:

PreparedStatement ps=con.prepareStatement("delete from books where id=?");
ps.setInt(1, Integer.parseInt(id));

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-12-03
    • 1970-01-01
    • 2012-05-30
    • 2015-09-21
    • 1970-01-01
    • 1970-01-01
    • 2015-08-07
    • 2012-03-17
    相关资源
    最近更新 更多