循环删除单个表行
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 现在可以正常工作了,感谢您的宝贵时间! :)以上是关于循环删除单个表行的主要内容,如果未能解决你的问题,请参考以下文章