我做一个简单的网络应用程序,用户可以选择项目的复选框将其从数据库中删除(如邮件管理器)。
那么,有没有正确的方法呢?
我想这样做:(在DAO课程中)
void delete(List<Long> ids){
.....
statement = connection.prepareStatement("DELETE FROM table WHERE id=?");
for (Long id: ids){
statement.setInt(1, id);
statement.executeUpdate();
}
......
或者:(在servlet动作类中)
DAO dao = new DAO();
for (Long id: ids){
dao.delete(id); // in DAO simple method void delete(long id);
}
不好。你告诉或解释如何做对吗? 更新:好的,有人可以告诉我如何逐个删除记录吗?
答案 0 :(得分:1)
这在很大程度上取决于它们是否应该在一次交易中被删除。想象一下,您需要在请求时删除5条记录,并删除第3条记录失败并发生异常。前两个记录和最后两个记录究竟应该发生什么?这是一项业务要求,您必须先了解自己。
至少,你在servlet中调用的DAO / service方法不应该关心这个。它应该能够像Set
那样获取ID(不,不是List
,因为它可以包含重复项):
Set<Long> ids = collectItSomehow();
someService.delete(ids);
然后,在真正的JDBC实现中,您可以使用PreparedStatement#addBatch()
创建一批语句,并使用PreparedStatement#executeBatch()
来执行它。您可以在这个答案中找到一些具体的例子:Reusing a PreparedStatement multiple times。
答案 1 :(得分:0)
for (Long id: ids){
populateArray;
}
从上面的循环创建数组(tempArray)并将其传递给它。
statement = connection.prepareStatement("DELETE FROM table WHERE id in("+ tempArray+")");
注意:如果未正确验证输入,这可能会导致sql注入。
答案 2 :(得分:-1)
您想逐个删除记录还是一次选择多条记录?