循环删除单个表行

Posted

技术标签:

【中文标题】循环删除单个表行【英文标题】:Delete single table row in a loop 【发布时间】:2014-12-29 05:53:18 【问题描述】:

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

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');

【问题讨论】:

所以客户没有唯一ID?如果没有唯一 ID,您如何知道要删除的客户? 使用'limit 1'你只能删除一条记录。但我认为你应该考虑@SalihErikci 提出的问题。 【参考方案1】:

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

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

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

【讨论】:

【参考方案2】:

试试:

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)");

【讨论】:

im 使用 hsqldb,它没有帮助,但使用 id 删除,im 使用序列进行自动增量,那么语句看起来如何? pst = getConnection().prepareStatement("delete from customer where " +" id = NEXT VALUE FOR seq1 '"+id +"); 现在我得到java.sql.SQLSyntaxErrorException: user lacks privilege or object not found: C.ID 没有更多异常,但仍会删除所有具有相同代码的异常。所以这意味着id-s都是一样的? 是的,所以您也没有身份字段。你知道它的内部架构吗? DELETE FROM customer WHERE id = '"+ id + "' 将方法参数更改为 id 现在可以正常工作了,感谢您的宝贵时间! :)

以上是关于循环删除单个表行的主要内容,如果未能解决你的问题,请参考以下文章

Postgres db删除父表行不删除子表行数据?

list循环删除单个元素

CAD中怎么删除多余的表行?CAD表格编辑教程

while 循环中的单个删除子句正在删除两个元素

引导按钮更改应用于所有表行

根据条件VBA删除表行