我想配置参数化查询到的效果:
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 - 因为我无法弄清楚如何参数查询这似乎是合理的。
看看春季数据访问的网页 ,特别是部分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());
我又看看说明书,它看起来像搜索阵列有一个替代语法,是这样的:
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