【问题标题】:Delete row from database through Servlet通过 Servlet 从数据库中删除行
【发布时间】:2015-12-03 23:54:36
【问题描述】:

我的 servlet 遇到了关于从数据库中删除记录的问题。 请查看我的 servlet 代码并纠正我。先感谢您 当手动提供单个 ID 时,DeleteRow servlet 可以正常工作。 场景是:

ManageSinger.java servlet 显示数据库中的记录以及每行中的“删除”超链接。但问题是每当我尝试按下删除按钮时..它会在 deleterow.java servlet 中接收到 ID 的空值.. 请从这里指导我如何只能将相应的 ID 传递给另一个 servlet。

ManageSinger.java

package com.ea.servlet;

import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.sql.*;

public class ManageSinger extends HttpServlet {

/**
 * 
 */
private static final long serialVersionUID = 1L;

public void doGet(HttpServletRequest req, HttpServletResponse res) throws IOException, ServletException {
    PrintWriter out = res.getWriter();
    res.setContentType("text/html");
    out.println("<html><body>");
    try {
        Class.forName("com.mysql.jdbc.Driver");
        Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/EATWO","root","");
        Statement stmt = con.createStatement();
        ResultSet rs = stmt.executeQuery("select * from singerdetails");
        out.println("<form method = \"post\">");
        out.println("<table border=1 width=50% height=50%>");
        out.println("<tr><th align=\"center\">Singer Name</th><th align=\"center\">StageName</th><th align=\"center\">Language</th><th></th><tr>");
        while (rs.next()) {
            String singername = rs.getString("singername");
            String stagename = rs.getString("stagename");
            String language = rs.getString("language"); 
            String id = rs.getString("userID");
            HttpSession session = req.getSession(true); 
            session.setAttribute("userID",id);
            out.println("<tr><td align=\"center\">" + singername + "</td><td align=\"center\">" + stagename + "</td><td align=\"center\">" + language + "</td><td align=\"center\"><a href = \"./deleterow\">Delete</a></td></tr>");
        }
        out.println("</table>");
        out.println("</form");
        out.println("</body></html>");
        con.close();
       }
        catch (Exception e) {
        e.printStackTrace();
    }finally{

    }
}
} 

DeleteRow.java

package com.ea.servlet;

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 javax.jws.Oneway;
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;


public class DeleteRow extends HttpServlet
{
public void doGet(HttpServletRequest req, HttpServletResponse res)
throws IOException, ServletException
{
res.setContentType("text/html");
PrintWriter pw = res.getWriter();
Connection con;
PreparedStatement st;
ResultSet rs;
try
{ 
HttpSession session = req.getSession(true);
Class.forName("com.mysql.jdbc.Driver");
String id = (String) session.getAttribute("id");
System.out.println(id);
con =        DriverManager.getConnection("jdbc:mysql://localhost:3306/EATWO","root","");
st= con.prepareStatement("delete from singerdetails where userID = ?");
st.setString(1, id);
st.executeUpdate();
int i = st.executeUpdate();
if(i!=0)
pw.println("Deleting row...");
else if (i==0)
{
pw.println("<br>Row has been deleted successfully.");
}
}
catch(SQLException sx)
{
pw.println(sx);
}
catch(ClassNotFoundException cx)
{
pw.println(cx);
}   
}
}

【问题讨论】:

  • 这里应该说 String id = (String) session.getAttribute("userID");而不是 DeleteRow.java 中的 (String) session.getAttribute("id")
  • 谢谢!!!有效。行正在删除。但不正确。当我单击第 5 行的删除时。最后一行被删除.. @AvinashReddy 你能再看看吗
  • 这意味着最后一个用户 ID 正在传递,而不是所需的用户 ID。请从这里帮助我
  • 在 ManageSinger.java 中,而你正在这样做 out.println(" " + 歌手名 + " " + 舞台名 + " " + 语言 + " 删除 ");请尝试添加用户 ID 并检查您要删除的所有行的用户 ID 是否到来
  • @AvinashReddy 也许您可以发表评论作为答案。

标签: html servlets jdbc


【解决方案1】:

在 DeleteRow.java 中说你应该做String id = (String) session.getAttribute("userID");而不是 (String) session.getAttribute("id") 。在 ManageSinger.java 中,您将属性设置如下 session.setAttribute("userID",id);

【讨论】:

  • 太好了!!! #learningloop @AvinashReddy 成功了!!!!谢谢你,非常非常... +1 谢谢你们俩
【解决方案2】:

根据您当前的ManageSinger.java,只有最后一个userID 会在会话中设置,这就是最后一个userID 被删除的原因。在ManageSinger.java 中,您可以将其设置为每条记录的 url 参数,而不是将 userID 设置为会话属性。

以下列出了更改:

//HttpSession session = req.getSession(true); 
//session.setAttribute("userID",id);
out.println("<tr><td align=\"center\">" + singername + "</td><td align=\"center\">" + stagename + "</td><td align=\"center\">" + language + "</td><td align=\"center\"><a href = \"./deleterow?userID="+id+"\">Delete</a></td></tr>");

DeleteRow.java 中,您可以从以下网址获取它,而不是从会话中获取userID

//HttpSession session = req.getSession(true);
//String id = (String) session.getAttribute("id");
String id = req.getParameter("userID").toString();

【讨论】:

  • 太好了!!! #learningloop @AvinashReddy 成功了!!!!谢谢你,非常非常... +1 谢谢你们俩
猜你喜欢
  • 2012-05-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-01
相关资源
最近更新 更多