通过组MySQL Java获取行

时间:2015-12-11 10:21:00

标签: java mysql large-data

我有大量数据,我需要按组处理它们。 将表结构放在图像enter image description here

如何按组检索? (首先获得组1,进程。接下来,获取组2,进程..依此类推。)分组基于 pos 列,该列应该相等。

我一直在阅读关于对同一个表进行基本连接的引用,但是对我来说这是不可能的,因为它会返回一组非常大的数据,这将导致OutOfMemoryError。

3 个答案:

答案 0 :(得分:1)

您有两种选择:

  1. 重写你的sql以确保你获得更小的结果集并读取容器中的整个数据。
  2. 使用ScrollableResultset。这允许您逐行获取而不将整个结果集加载到内存中。

答案 1 :(得分:1)

您需要两个游标,一个用于选择不同的组,另一个用于分别处理每个组。

 //Assuming you have a Connection conn;
 PreparedStatement groupsPS = 
     conn.prepareStatement("SELECT distinct pos from yourtable");
 ResultSet groupsRS = groupsPS.executeQuery();
 PreparedStatement groupdataPS = 
     conn.prepareStatement("SELECT * from yourtable where pos = ?");
 ResultSet groupdataRS = null;

 while(groupsRS.next())
 {
    groupdataPS.setString(1, groupsRS.getString("pos"));
    groupdataRS = groupdataPS.executeQuery();
    while(groupsRS.next())
    {
      //process your data here
    }
    groupdataRS.close();
 }
 groupsRS.close();
 groupdataPS.close();
 groupsPS.close();

答案 2 :(得分:0)

就像@TimeKiller和@BetaRide所提到的那样,我重组了我的SQL表,并为我的 pos 添加了一个索引表,其频率为另一列。

使用它,我可以使用频率> = 2迭代每个 pos ,使用选定的 pos 获取上表中的行,并处理它们

谢谢!