当前位置: 首页 > 知识库问答 >
问题:

从JAVA调用具有多个IN子句的查询

水麒
2023-03-14
public List<MYVO> callDB(List<String> sourceAndIdList) {
        System.out.println(sourceAndIdList);
        String query = "select * from MYTABLE where (field1, field2) IN (:source_monitorId_list)";
        Map<String, List<String>> namedParameters = Collections.singletonMap("source_monitorId_list", sourceAndIdList);
        return this.namedParameterJdbcTemplate.query(query , namedParameters, new RowMapper<MYVO>() {
            @Override
            public MYVO mapRow(ResultSet rs, int rowNum) throws SQLException {
                ....
            }
        });
    }


编辑:这不是一个重复的,因为我正在寻找一个使用SpringNamedParameterJDBCTemplate的解决方案,用于具有多个IN子句的查询,并且参数的大小只有在运行时才知道。

共有1个答案

柏高丽
2023-03-14

不能在“in”中使用这样的bind参数。

要么你做:

IN ((:p1, :p2), (:p3,:p4), (:p5,:p6))

但它假设您确切地知道您有多少项(在本例中为3项),或者您在SQL字符串中“物化”您的参数:

String query = "select * from MYTABLE where (field1, field2) IN (('A', '1'), ('B', '2'), ('C', '3'))";
 类似资料:
  • 问题内容: 有没有一种方法可以使用IN子句进行CASE语句? 问题答案: 是的。您需要使用表达式的“搜索”形式而不是“简单”形式

  • 问题内容: 我正在将几个已硬编码到应用程序中的查询转换为动态的参数化查询。我遇到一个特定的查询,该查询有一个子句: 第一个参数很简单,因为它只是一个普通参数: 但是,第二个参数是一个整数列表,表示需要更新的行的ID。如何为单个参数传递整数列表?或者,您将如何设置此查询,以使您不必每次调用时都完全构建它,并且可以防止SQL注入攻击? 问题答案: 您可以基于(可能)可变数量的参数“动态”构建参数化查询

  • 问题内容: 需要知道如何构造一个hibernate查询,该查询可获取与包含多个列值的子句匹配的结果。 例如, 这里将是一个二维数组,可以包含用于基本类型例如,基本包装对象,等等。 这可能吗? 问题答案: 在这里写下我如何实现此目标。基本上,我们需要从需要查询的列集中制作一个Hibernate组件(读取@Embeddable对象),并将其嵌入到主实体中。 列组可以如下组合: 将上述内容嵌入到您的主要

  • 问题内容: 我正在寻找使用sqlalchemy执行此查询。 我只想要喜欢(薰衣草和扁豆汤)或(黑胡萝卜汁)的孩子。另外,这可能是大量喜欢的颜色和食物的列表(可能> 10K),因此,我想分批进行。 问题答案: 您需要构造:

  • 问题内容: 我正在寻找使用sqlalchemy执行此查询。 我只想要喜欢(薰衣草和扁豆汤)或(黑胡萝卜汁)的孩子。另外,这可能是大量喜欢的颜色和食物的列表(可能> 10K),因此,我想分批进行。 这是相似的,但并不能完全理解: Sqlalchemy in子句 问题答案: 您需要构造:

  • 问题内容: 我有一个查询说 ,我想要的是使用where子句或其他任何方式显示多个记录,以便获得以下数据。 姓名编号 我试着用 在clause.ie 或等,但没有作品。 问题答案: 只需使用一个子句 您也可以使用OR(仅用于提供信息,在这种情况下,我将不使用此功能) 如果您的where子句中有其他条件,请不要忘记在“或”周围加上圆括号。