如何使用 SQL 中的 "IN" 运算符编写 LDAP 查询
How to use "IN" operator from SQL for writing LDAP query
我想使用 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" 运算符一起使用。
不,没有用于搜索 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());
我想使用 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" 运算符一起使用。
不,没有用于搜索 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());