如何使用预准备语句从数据库中删除条目?我发现我必须编写以下代码
String deleteSQL = "DELETE DBUSER WHERE USER_ID = ?
但我想指定一个带有多个变量的子句。我使用了AND
运算符,但它似乎不起作用。
答案 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表示字符串,等等)。这适用于选择和删除查询。