【问题标题】:Supply a list of column values with wildcards, to a sql query向 sql 查询提供带有通配符的列值列表
【发布时间】:2020-09-01 02:11:54
【问题描述】:

使用 Java 8 、Oracle 11g 和 Spring Boot,我们通常运行 SQL 选择类似:

String sqlQuery="select col1,col2 from myTable where col1 = :colValue";
Map<String, Object> parameters = new HashMap<String, Object>();
parameters.put("colValue", "xxx");
// Then run the query :
List<MyClass>= jdbcTemplate.query(sqlQuery,parameters,(rs, rowNum) -> new MyClass
      (rs.getString("col1"),rs.getString("col2"))  );   

也可以提供 col1 值的列表

String sqlQuery="select col1,col2 from myTable where col1 in ( :colList) ";
Map<String, List<String>> parameters = new HashMap<String, List<String>();
List<String> myColList= Arrays.asList("xxx", "yyy");
parameters.put("colList", myColList );

但是如果我们想在列值中包含 SQL 通配符怎么办:

String sqlQuery="select col1,col2 from myTable where col1 like ( :colList) ";
List<String> myColList= Arrays.asList("%xxx%", "yyy%");

我们不能在 where 子句中混合 LIKE 和 IN 结构,那么还有其他方法吗?我知道我可以动态构建自己的 where 子句,但我试图避免这种情况。任何指针表示赞赏。

【问题讨论】:

标签: java spring-boot oracle11g


【解决方案1】:

您可以使用MapSqlParameterSource

Set<Integer> myColList = new HashSet<>(Arrays.asList("xxx", "yyy"));
MapSqlParameterSource parameters = new MapSqlParameterSource();
parameters.addValue("colList", myColList);

【讨论】:

  • 谢谢,这行得通,但我过度简化了我原来的问题,抱歉。我已经更新它以包含真正的问题
  • @DS。您不能像 In 查询那样进行 like 查询。您必须在 OR 条件下多次使用同一列
  • 是的,但是您可以使用 MapSqlParameterSource 或类似方法将值分配给 OR
  • 我不这么认为,你得手动构造where条件
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-05
  • 2014-02-16
相关资源
最近更新 更多