参数化查询:检查是否领域是在SELECT语句中值数组(Parameterized Query: Ch

2019-09-03 12:05发布

我想配置参数化查询到的效果:

SELECT field1 FROM myTable WHERE field2 IN (1,2,3,4)

我使用的数据库是Postgres的。

此查询成功运行unparameterized,但我想使用参数化查询与一个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 - 因为我无法弄清楚如何参数查询这似乎是合理的。

Answer 1:

看看春季数据访问的网页 ,特别是部分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());


Answer 2:

我又看看说明书,它看起来像搜索阵列有一个替代语法,是这样的:

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


文章来源: Parameterized Query: Check if field is in array of values in SELECT statement