Java 参数化查询:检查字段是否在SELECT语句中的值数组中

Java 参数化查询:检查字段是否在SELECT语句中的值数组中,java,sql,postgresql,jdbc,parameterized,Java,Sql,Postgresql,Jdbc,Parameterized,我正在尝试将参数化查询配置为: SELECT field1 FROM myTable WHERE field2 IN (1,2,3,4) 我使用的数据库是Postgres 此查询成功地执行了非参数化,但我想使用带有JdbcTemplate的参数化查询来填充有效field2值(即整数)的列表 为var(“1,2,3,4”,“[1,2,3,4]”,,“{1,2,3,4}”,或”(1,2,3,4)”)尝试了各种查询: myJdbcTemplate.query("SELECT field1 FROM

我正在尝试将参数化查询配置为:

SELECT field1 FROM myTable WHERE field2 IN (1,2,3,4)
我使用的数据库是Postgres

此查询成功地执行了非参数化,但我想使用带有JdbcTemplate的参数化查询来填充有效field2值(即整数)的列表

var
“1,2,3,4”
“[1,2,3,4]”,
“{1,2,3,4}”
,或
”(1,2,3,4)”
)尝试了各种查询:

myJdbcTemplate.query("SELECT field1 FROM field2 IN (?)", new Object[]{ var })

而且

myJdbcTemplate.query("SELECT field1 FROM field2 IN ?::integer[]", new Object[]{ var })
另一方面,描述如何参数化查询的资源也非常有用


所有这些查询都会抛出PSQLException,表明运算符失败或存在类型不匹配——这似乎是合理的,因为我不知道如何参数化查询。

我又看了一下手册,似乎有一种替代语法,类似于:

SELECT field1 FROM myTable WHERE field2 = ANY(ARRAY[1,2,3,4])
可以参数化为:

myJdbcTemplate.query("SELECT field1 FROM myTable WHERE field2 = ANY(?::integer[])"), new Object[]{ "{1,2,3,4}" })
看一看Spring,特别是其中包含使用构建“IN”子句的部分

e、 g

谢谢,这正是我想要的。
myJdbcTemplate.query("SELECT field1 FROM myTable WHERE field2 = ANY(?::integer[])"), new Object[]{ "{1,2,3,4}" })
NamedParameterJdbcTemplate jdbcTemplate = new NamedParameterJdbcTemplate(dataSource);
String sql = "select * from emp where empno in (:ids)";
List idList = new ArrayList(2);
idList.add(new Long(7782));
idList.add(new Long(7788));
Map parameters = new HashMap();
parameters.put("ids", idList);
List emps = jdbcTemplate.query(sql, parameters, new EmpMapper());