【问题标题】:How to use "IN" operator from SQL for writing LDAP query如何使用 SQL 中的“IN”运算符编写 LDAP 查询
【发布时间】:2019-07-23 09:55:21
【问题描述】:

我想使用 SQL 中的“IN”运算符来编写 LDAP 查询。

例如:如果我有一个名为“NameList”的名称列表,我会编写以下 SQL 查询

SELECT * FROM TABLENAME WHERE NAME IN "NameList"

我该如何编写类似的 LDAP 查询?

public static final String[] LDAP_ATTRIBUTE_IDS = {"displayName"};

LdapContext ldapContext = new InitialLdapContext(env, null); \\env has all 
 \\connection details

List NameList = new ArrayList<String>();
NameList.add("ABC");
NameList.add("XYZ");
NameList.add("LMN");

NamingEnumeration namingEnumeration = ldapContext.search("",
"(&(objectCategory=person)(objectclass=user)(|(sAMAccountName=XYZ)(sAMAccountName=LMN)(sAMAccountName=ABC)))", getSearchControls());

Attributes attrs = ((SearchResult) namingEnumeration.next()).getAttributes();
String value = attrs.get(LDAP_ATTRIBUTE_IDS);

而不是使用“|”添加 XYZ、LMN 和 ABC运算符 我想知道 NameList 是否可以与“IN”运算符一起使用。

【问题讨论】:

    标签: sql ldap spring-ldap ldap-query


    【解决方案1】:

    不,没有用于搜索 LDAP 的等效 IN 运算符。

    也许您没有使用 Active Directory,但 AD 确实支持 SQL Dialect 进行搜索,但即便如此,它也不支持 IN

    因此,做到这一点的唯一方法就是你已经是这样。如果您有 NameList 数组,则可以使用 String.join 构建查询。像这样的:

    NamingEnumeration namingEnumeration = ldapContext.search("",
    "(&(objectCategory=person)(objectclass=user)(|(sAMAccountName=" + String.join(")(sAMAccountName=", NameList) + ")))", getSearchControls());
    

    【讨论】:

      猜你喜欢
      • 2016-04-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-06
      • 2014-05-05
      • 1970-01-01
      • 2020-06-06
      • 1970-01-01
      相关资源
      最近更新 更多