如何使用准备好的语句从数据库中删除条目?我发现我必须编写以下代码
String deleteSQL = "DELETE DBUSER WHERE USER_ID = ?
但我想指定一个包含多个变量的子句。我使用了AND
运算符,但它似乎不起作用。
如何使用准备好的语句从数据库中删除条目?我发现我必须编写以下代码
String deleteSQL = "DELETE DBUSER WHERE USER_ID = ?
但我想指定一个包含多个变量的子句。我使用了AND
运算符,但它似乎不起作用。
它必须工作/例如
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 (?,?,?)
和设置值,如第一个示例
如果您的语法不正确,这是一个示例。
DELETE DBUSER WHERE USER_ID = ? and USER_NAME = ?;
您可以通过使用更多运算符在 where 子句中附加更多条件AND ...
。
或者,如果您在单个查询中要删除多个 USER_ID。
DELETE DBUSER WHERE USER_ID in (?, ?, ?, ?);
您是否正在寻找允许您在 WHERE 子句中指定多个值的IN运算符,例如在我的示例中。
String deleteSQL = "DELETE DBUSER WHERE USER_ID IN (?)"
尽管在PreparedStatement IN 子句替代方案中,您可能想查看一些有用的答案和链接,例如JDBC 中的批处理语句,其中讨论了不同批处理方法的优缺点。IN
我建议的方法是该讨论的一部分。最终结果是您只需访问数据库一次,而不是每次删除一次,并且由于所需的网络活动减少,因此性能更好。
我认为 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 表示字符串等)。这适用于选择和删除查询。