如何正确删除数据库中的记录列表?

时间:2012-02-14 14:40:11

标签: java jdbc

我做一个简单的网络应用程序,用户可以选择项目的复选框将其从数据库中删除(如邮件管理器)。
那么,有没有正确的方法呢?

我想这样做:(在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);
    }

不好。你告诉或解释如何做对吗? 更新:好的,有人可以告诉我如何逐个删除记录吗?

3 个答案:

答案 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)

您想逐个删除记录还是一次选择多条记录?