0

是否有可能只检索启用的用户 - 添加过滤器 - 到 jt400 的 UserList 的 getUsers 方法?

我做了以下实现,但它没有很好的性能,所以我试图找到一种更好的方法,如果有可能过滤用户并只获得启用的用户。

Set<String> as400Users = new HashSet(); 
AS400 as400 = new AS400(host, username, password);

//Retrieving Users
UserList users = new UserList(as400);
Enumeration io = users.getUsers();

  while (io.hasMoreElements()) {
            com.ibm.as400.access.User u = (com.ibm.as400.access.User)io.nextElement();
            String userName = u.getName();

            if (u.getStatus().equalsIgnoreCase("*ENABLED")) {
                as400Users.add(userName);
            }

        }
4

1 回答 1

3

您可以像这样查询 USER_INFO 视图:

select * 
from qsys2.user_info
where status = '*ENABLED'

这在 v7.1 中可用。请注意,这只提供您有权访问的用户。

您可能还想getName()在过滤器内移动呼叫:

Set<String> as400Users = new HashSet(); 
AS400 as400 = new AS400(host, username, password);

//Retrieving Users
UserList users = new UserList(as400);
Enumeration io = users.getUsers();

while (io.hasMoreElements()) {
    com.ibm.as400.access.User u = (com.ibm.as400.access.User)io.nextElement();

    if (u.getStatus().equalsIgnoreCase("*ENABLED")) {
        as400Users.add(u.getName());
    }

}

或者您可以使用较新的foreach语法getUsers(-1,0)

Set<String> as400Users = new HashSet(); 
AS400 as400 = new AS400(host, username, password);

//Retrieving Users
UserList users = new UserList(as400);
for (com.ibm.as400.access.User u: users.getUser(-1,0)) {
    if (u.getStatus().equalsIgnoreCase("*ENABLED")) {
        as400Users.add(u.getName());
    }
}

现在只需选择最快的方法。

于 2017-11-17T12:13:53.710 回答