0

如何使用准备好的语句从数据库中删除条目?我发现我必须编写以下代码

String deleteSQL = "DELETE DBUSER WHERE USER_ID = ?

但我想指定一个包含多个变量的子句。我使用了AND运算符,但它似乎不起作用。

4

4 回答 4

1

它必须工作/例如

Select from Employee e where e.ID < ? and e.ID >= ? order by e.ID

设置值使用这个:

    int id1 = 1;
    int id2 = 10;
    preparedStatement.setInt(2, id1);
    preparedStatement.setInt(1, id2);

删除我使用这个代码:

public synchronized boolean deleteNewsById(Integer[] idList)
        throws NewsManagerException {
    DatabaseConnection connection = pool.getConnection();
    StringBuffer buffer = new StringBuffer();
    buffer.append("(");
    buffer.append(idList[0]);
    for (int i = 1; i < idList.length; i++) {
        buffer.append(",");
        buffer.append(idList[i]);
    }
    buffer.append(")");
    PreparedStatement statement = connection
            .getPreparedStatement(DELETE_NEWS_BY_ID + buffer);
}

和 sql 查询看起来像这样

private static final String DELETE_NEWS_BY_ID = "delete from NEWS where ID in ";

或简单的写入delete from NEWS where ID in (?,?,?)和设置值,如第一个示例

于 2013-02-21T13:19:13.103 回答
1

如果您的语法不正确,这是一个示例。

DELETE DBUSER WHERE USER_ID = ? and USER_NAME = ?;

您可以通过使用更多运算符在 where 子句中附加更多条件AND ...

或者,如果您在单个查询中要删除多个 USER_ID。

DELETE DBUSER WHERE USER_ID in (?, ?, ?, ?);
于 2013-02-21T13:21:31.480 回答
0

您是否正在寻找允许您在 WHERE 子句中指定多个值的IN运算符,例如在我的示例中。

String deleteSQL = "DELETE DBUSER WHERE USER_ID IN (?)"

尽管在PreparedStatement IN 子句替代方案中,您可能想查看一些有用的答案和链接,例如JDBC 中的批处理语句,其中讨论了不同批处理方法的优缺点。IN我建议的方法是该讨论的一部分。最终结果是您只需访问数据库一次,而不是每次删除一次,并且由于所需的网络活动减少,因此性能更好。

于 2013-02-21T13:20:32.057 回答
0

我认为 Aleksei Bulgak 的回应是正确的,但也许更直接地说......你可以这样设置你的参数:

String stmt = "DELETE DBUSER WHERE USER_ID = ? and (USER_NAME = ? or USER_NAME = ?)";
preparedStatement.setInt(1, firstParam);
preparedStatement.setString(2, secondParam);
preparedStatement.setString(3, thirdParam);

...并且对于 SQL 中的许多参数(问号)(无论您使用的是 IN 还是任何您想要的),您都应该在此处设置这么多参数(使用 setInt 表示整数,使用 setString 表示字符串等)。这适用于选择和删除查询。

于 2013-02-21T13:52:37.550 回答