将JDBC结果集转换为嵌套数组列表

时间:2014-09-09 21:03:20

标签: java jdbc

使用JDBC,我设法在数据库上运行查询并接收结果集(rs)。使用这些信息,我希望生成一个嵌套的数组列表。

// Created Array List
public static ArrayList<ArrayList<SessionRecord>> tempSessionOrg = new ArrayList<ArrayList<SessionRecord>>();

内部列表需要按第一列返回的信息进行分组。这就是我迄今为止所做的一切:

while(rs.next()) { 
          SessionRecord temp = new SessionRecord(rs.getString("SessionID"),rs.getString("NetworkAddress"),rs.getString("EventType"),rs.getString("Time"),rs.getString("Name"),rs.getString("SessionType"),rs.getString("ProcessType")); 
      }

我已经编写了一个非常相似的程序,除了它将结果集放在一个没有嵌套的ArrayList中。不幸的是,这段类似的代码并没有真正帮助我找到解决方案。

while(rs.next()) {
    dbSession.add(new SessionRecord(rs.getString("name"),rs.getString("ParticipantName"),rs.getString("GuestLoggedOnUsername"),rs.getString("GuestMachineName"),rs.getString("inicio"),rs.getString("diferencia")));
}

有什么建议吗?

修改

此时,我有以下两个块一个代码。

一:

public static ArrayList<SessionRecord> singleSessionRecords = new ArrayList<SessionRecord>();
public static ArrayList<ArrayList<SessionRecord>> tempSessionOrg = new ArrayList<ArrayList<SessionRecord>>();

二:

while(rs.next()) { 
          singleSessionRecords.add(new SessionRecord(rs.getString("SessionID"),rs.getString("NetworkAddress"),rs.getString("EventType"),rs.getString("Time"),rs.getString("Name"),rs.getString("SessionType"),rs.getString("ProcessType"))); 
      }

      Map<String, List<SessionRecord>> byID = singleSessionRecords.stream().collect(Collectors.groupingBy(SessionRecord::SessionID));
      tempSessionOrg.add((ArrayList<SessionRecord>) Map.values());

我收到地图行的类型不匹配错误,并且我无法在最后一行中对非静态方法进行静态引用。这两个中的后一个对我来说很容易修复,但我不确定如何正确实现Map。

1 个答案:

答案 0 :(得分:1)

您使用的是Java 8吗? 如果是这样,可以通过以下代码轻松实现:

Map<String, List<SessionRecord>> byName
         = temp.stream()
                    .collect(Collectors.groupingBy(SessionRecord::name));

在此示例中,我按名称对sessionRecords进行分组,您可以轻松更改它以满足您的分组需求。