java将结果集转换为列表
我想将结果集转换为对象列表。这是我的疑问:
String querystring1= "SELECT userID, privilege"
+ "FROM dbo.User order by userID, privilege";
userID privilege
------------------
1001 read
1001 write
1001 execute
1001 delete
1006 execute
1006 read
1006 write
1007 read
1007 write
我有一个类用户定义如下:
public class User {
private int userID;
private List<String> userPrivelege;
}
我想将其作为用户列表的输出,这是我实现的代码:
String previousId = null;
List<String> PrivList= new ArrayList<String>();
List<User> allUserList= new ArrayList<User>();
while(result_set.next()) {
String userID = result_set.getString("userID");
String privilege = result_set.getString("privilege");
if (previousId == null) { // first time
User user = new User();
PrivList.add(privilege);
previousId=userID;
} else if (previousId.equals(userID) {
PrivList.add(privilege);
} else {
user.setUserPrivilege(PrivList);
allUserList.add(user);
PrivList.clear();
previousId=null;
}
}
问题是,除了创建的第一个用户对象之外,所有下一个用户对象总是缺少第一个值,这意味着用户1006将拥有除3之外的2个权限。 知道吗
# 1 楼答案
所有
User
对象都引用相同的特权对象List
,因为您不为每个用户创建新实例。相反,你只清除列表因此,所有用户都被设置为具有2个权限,因为您处理的最后一个用户具有2个权限
因此,替换:
作者:
# 2 楼答案
在我看来,我认为这不是一个好的模式。您应该有第二个具有与用户相关权限的表。但要解决你的问题:
# 3 楼答案
您需要为每个用户创建一个
PrivList
的新实例此外,您需要为下一个用户添加权限,否则您会在循环中丢失该信息
由
<--
注释显示的编辑# 4 楼答案
User
对象李>PrivList.clear();
清除刚刚分配给用户的列表。而是创建一个新的列表,正如davidxxx所说李>previousId
不是null
(也就是说,任何用户的previlege都已被处理),则需要将值分配给最后一个用户,并以与循环中最后一个else
相同的方式将其添加到列表中李>所有这些都表明,可以使用流对更优雅的解决方案进行编码
# 5 楼答案
那是因为你错过了新用户的第一个特权
在此处为下一个用户执行权限初始化
PrivList = new ArrayList<>(); PrivList.add(privilege);