按组获取行 MySQL Java
Get Rows By Group MySQL Java
我的数据量很大,需要分组处理。
在图像中具有table结构
如何按组检索它们? (首先获取第 1 组,进程。接下来,获取第 2 组,进程......等等。)分组基于应该相等的 pos 列。
我一直在阅读有关对相同 table 进行基本连接的参考资料,但这对我来说是不可能的,因为它 returns 一个非常大的数据集将导致 OutOfMemoryError .
你有两个选择:
- 重写你的 sql 以确保你得到更小的结果集并读取垃圾中的整个数据。
- 使用 ScrollableResultset。这允许您逐行获取,而无需将整个结果集加载到内存中。
您需要两个游标,一个用于 select 个不同的组,另一个用于分别处理每个组。
//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();
就像@TimeKiller 和@BetaRide 提到的那样,我重组了我的 SQL tables 并为我的 pos[=19= 添加了一个索引 table ] 其频率作为另一列。
使用这个,我可以以 >= 2 的频率遍历每个 pos,获取上面 table 中选定的行 pos,并处理它们。
谢谢!
我的数据量很大,需要分组处理。
在图像中具有table结构
如何按组检索它们? (首先获取第 1 组,进程。接下来,获取第 2 组,进程......等等。)分组基于应该相等的 pos 列。
我一直在阅读有关对相同 table 进行基本连接的参考资料,但这对我来说是不可能的,因为它 returns 一个非常大的数据集将导致 OutOfMemoryError .
你有两个选择:
- 重写你的 sql 以确保你得到更小的结果集并读取垃圾中的整个数据。
- 使用 ScrollableResultset。这允许您逐行获取,而无需将整个结果集加载到内存中。
您需要两个游标,一个用于 select 个不同的组,另一个用于分别处理每个组。
//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();
就像@TimeKiller 和@BetaRide 提到的那样,我重组了我的 SQL tables 并为我的 pos[=19= 添加了一个索引 table ] 其频率作为另一列。
使用这个,我可以以 >= 2 的频率遍历每个 pos,获取上面 table 中选定的行 pos,并处理它们。
谢谢!