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,指示操作符失败或类型不匹配 - 这似乎是合理的,因为我无法弄清楚如何参数化查询.
请查看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)