Rit*_*esh 5 sql postgresql jdbc prepared-statement
我必须为Postgres数据库编写一个SQL查询,如下所示:
DELETE FROM employee WHERE ename IN (?)
Run Code Online (Sandbox Code Playgroud)
我想传递ename包含多个员工姓名的列表或字符串,例如"abc, bcd, efg".如何设置值?
如何在Postgres中使用IN子句PreparedStatement?
a_h*_*ame 11
有几种方法可以做到这一点.干净的方法是将数组传递给预准备语句.尼克答案的替代方法是传递适当的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);
Run Code Online (Sandbox Code Playgroud)
另一种选择是使用Postgres的字符串函数将逗号分隔列表转换为数组.这可能是最简单的方法:
PreparedStatement pstmt = connection.prepareStatement(
"DELETE FROM employee WHERE ename = ANY (string_to_array(?, ','))");
psmt.setString(1, "abc,bcd,efg");
Run Code Online (Sandbox Code Playgroud)
请注意,逗号和值之间不能有空格!在string_to_array()完成它的工作之后,这些空间将成为存储在数组中的值的一部分,因此ename = ' bcd'如果列中没有前导空格ename(很可能),那么比较将会失败
像这样:
DELETE FROM employee WHERE ename = ANY(?)
Run Code Online (Sandbox Code Playgroud)
参数应格式化为数组文字,例如"{abc,bcd,efg}".
小智 -10
您可能想尝试以下操作:
DELETE FROM employee
WHERE ename IN ('abc', 'bcd', 'efg')
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5546 次 |
| 最近记录: |