使用预准备语句从数据库中删除值

时间:2013-02-21 13:15:10

标签: java sql prepared-statement

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

String deleteSQL = "DELETE DBUSER WHERE USER_ID = ?

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

4 个答案:

答案 0 :(得分: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 (?,?,?)并设置值,如第一个示例

答案 1 :(得分:1)

如果你的语法不正确,这是一个例子。

DELETE DBUSER WHERE USER_ID = ? and USER_NAME = ?;

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

如果您在一个查询中要删除多个USER_ID,则为<..>

DELETE DBUSER WHERE USER_ID in (?, ?, ?, ?);

答案 2 :(得分:0)

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

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

虽然在PreparedStatement IN clause alternatives中有一些有用的答案和链接,您可能需要查看,例如Batch Statements in JDBC,讨论不同批处理方法的优缺点。我建议的IN方法是讨论的一部分。最终的结果是,您只需要一次访问数据库,而不是每次删除一次,因为所需的网络活动减少,性能会更好。

答案 3 :(得分: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表示int,setString表示字符串,等等)。这适用于选择和删除查询。