加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

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

发布时间:2020-12-15 08:31:13 所属栏目:Java 来源:网络整理
导读:我正在尝试将参数化查询配置为以下效果: SELECT field1 FROM myTable WHERE field2 IN (1,2,3,4) 我正在使用的数据库是Postgres. 此查询成功运行未参数化,但我想使用带有JdbcTemplate的参数化查询来填充列表中的有效field2值(这是整数). 尝试var的各种值(“
我正在尝试将参数化查询配置为以下效果:

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

我正在使用的数据库是Postgres.

此查询成功运行未参数化,但我想使用带有JdbcTemplate的参数化查询来填充列表中的有效field2值(这是整数).

尝试var的各种值(“1,4”,“[1,4]”,“{1,4}”或“(1,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,指示操作符失败或类型不匹配 – 这似乎是合理的,因为我无法弄清楚如何参数化查询.

解决方法

看一下 Data Access web page春季,特别是 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());

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读