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

Mar*_*iot 3 java sql postgresql jdbc parameterized

我正在尝试将参数化查询配置为以下效果:

SELECT field1 FROM myTable WHERE field2 IN (1,2,3,4)
Run Code Online (Sandbox Code Playgroud)

我正在使用的数据库是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 })
Run Code Online (Sandbox Code Playgroud)

myJdbcTemplate.query("SELECT field1 FROM field2 IN (?::integer[])", new Object[]{ var })
Run Code Online (Sandbox Code Playgroud)

并且

myJdbcTemplate.query("SELECT field1 FROM field2 IN ?::integer[]", new Object[]{ var })
Run Code Online (Sandbox Code Playgroud)

另外,描述如何参数化查询的资源也非常有用.

所有这些查询抛出PSQLExceptions,指示操作符失败或类型不匹配 - 这似乎是合理的,因为我无法弄清楚如何参数化查询.

Bri*_*new 5

请查看Spring Data Access网页,特别是第11.7.3节,其中介绍了如何使用NamedParameterJdbcTemplate构建"IN"子句.

例如

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());
Run Code Online (Sandbox Code Playgroud)