删除循环中的单个表行

时间:2014-11-02 13:07:00

标签: java servlets dao

首先,如果我做任何语法错误,我的母语不是英语。 这里我从数据库打印出所有客户,并为每个表行添加删除链接,将客户代码作为参数。当点击链接时,它应该删除一行,但它删除所有具有相同代码的客户,任何想法如何只删除一行,即使有相同代码的客户?

for(Customers customer : customers)
    {
        String param = customer.getCode();
        request.setAttribute("value3",param);

        out.println(

    "<tbody><tr> "
    + "<td>"+ customer.getFirst_name()+" "+"</td>"
    + "<td>"+ customer.getSurname()+" "+"</td>"
    + "<td>"+ customer.getCode()+" " +"</td></br>"
    + " "+"<td><a href='"+request.getContextPath()+"/Search?id="+param+"'>Delete</a></td></tr>"

     );     

    dao.deleteCustomer(request.getParameter("id"));

    }

删除方法:

public void deleteCustomer(String code)
{
    try{
        pst = getConnection().prepareStatement("delete from customer where "
    +" code = '"+code +"'");

        pst.executeUpdate();        

    }catch(Exception e)
    {

        throw new RuntimeException(e);
    } finally {

        closeResources();
    }


}

架构文件:

CREATE SEQUENCE seq1 AS INTEGER START WITH 1;

CREATE TABLE customer (
     id BIGINT NOT NULL PRIMARY KEY,
     first_name VARCHAR(255) NOT NULL,
     surname VARCHAR(255) NOT NULL,
     code VARCHAR(255) NOT NULL,
);

INSERT INTO customer VALUES(NEXT VALUE FOR seq1,'Jane','Doe','123');
INSERT INTO customer VALUES(NEXT VALUE FOR seq1,'John','Doe','456');
INSERT INTO customer VALUES(NEXT VALUE FOR seq1,'Jack','Smith','789');

2 个答案:

答案 0 :(得分:2)

您应该根据客户在数据库中的ID而不是代码来删除客户。

用户ID应始终是唯一的,而代码可能不是唯一的。

您的数据示例可能会有所帮助。

答案 1 :(得分:0)

尝试:

pst = getConnection().prepareStatement("DELETE FROM customer WHERE code = '"+ code + "' and id IN  (select * from (SELECT MAX(c.id)  FROM customer c where code = '"+ code + "') as d)");