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

nkkqxpd9  于 2021-07-05  发布在  Java
关注(0)|答案(2)|浏览(333)

我正在尝试配置一个参数化查询,其效果如下:

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 })

还有

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

另一方面,描述如何参数化查询的资源也非常有用。
所有这些查询都抛出psqlexceptions,指出操作符失败或存在类型不匹配——这似乎是合理的,因为我不知道如何参数化查询。

sqserrrh

sqserrrh1#

看看SpringDataAccessWeb页面,特别是第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());
mrwjdhj3

mrwjdhj32#

我又看了一下手册,它看起来像是搜索数组有一种替代的语法,比如:

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}" })

相关问题