gpt4 book ai didi

sql - 如何在 PostgreSQL 中使用带有 PreparedStatement 的 IN 子句

转载 作者:行者123 更新时间:2023-11-29 11:26:58 26 4
gpt4 key购买 nike

我必须为 Postgres 数据库编写一个 SQL 查询,如下所示:

DELETE FROM employee WHERE ename IN (?)

我想将 ename 作为包含多个员工姓名的列表或字符串传递,例如“abc、bcd、efg”。如何设置值?

如何在 Postgres 中将 IN 子句与 PreparedStatement 一起使用?

最佳答案

有几种方法可以做到这一点。干净的方法是将数组传递给准备好的语句。 Nick 的答案的替代方法是传递适当的 java.sql.Array 值:

PreparedStatement pstmt = connection.prepareStatement(
"DELETE FROM employee WHERE ename = ANY (?)");
String[] idList = new String[] {"abc", "bcd", "efg"};
Array ids = connection.createArray("varchar", idList);
pstmt.setArray(1, ids);

另一种选择是使用 Postgres 的字符串函数将逗号分隔的列表转换为数组。这可能是最简单的方法:

PreparedStatement pstmt = connection.prepareStatement(
"DELETE FROM employee WHERE ename = ANY (string_to_array(?, ','))");
psmt.setString(1, "abc,bcd,efg");

请注意,逗号和值之间不能有空格!在 string_to_array() 完成它的工作之后,这些空格将成为存储在数组中的值的一部分,因此比较将例如是 ename = 'bcd' 如果 ename 列中没有前导空格,这将失败(这很可能)

关于sql - 如何在 PostgreSQL 中使用带有 PreparedStatement 的 IN 子句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36929116/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com