如何从mysql java中获取有限的数据

时间:2013-09-20 14:07:07

标签: java mysql resultset large-data

我可以限制结果集中的行数吗? 我的表包含大约800000行,如果我在结果集中获取它们,这肯定会导致OOM异常。每行有40列。 我不想同时想要对它们进行处理,但是每一行都要过滤掉一些数据。

提前谢谢。

4 个答案:

答案 0 :(得分:1)

您可以使用JDBC fetch size来限制结果集中的结果。它比SQL LIMIT 更好,因为它也适用于其他数据库而不更改查询。 Jdbc diriver不会从数据库中读取整个结果。每次它将检索由提取大小指定的记录,并且不再存在内存问题。

答案 1 :(得分:1)

下面的内容应该是一个SQL解决方案,但是效果相当低,因为每次都需要获取越来越多的行。

假设您的ORDER BY基于唯一 int和 你将一次获取1000行。

SET currenttop = 0;
SET cuurentid = 0;
SELECT * FROM YourTable t
WHERE t1.ID > @currentID AND (@currentid := t1.ID) IS NOT NULL; 
LIMIT (@currenttop:=@currenttop+1000);

当然,您可以选择处理Java代码中的变量。

答案 2 :(得分:0)

您可以在SQL查询中使用limit关键字,请参阅以下内容

SELECT * FROM tbl LIMIT 5,10;  # Retrieve rows 6-15

您可以详细了解如何使用limit here

干杯!!

答案 3 :(得分:-1)

你有几个选择。首先,为SQL查询添加限制。其次,您可以使用JDBCTemplate.query()RowCallbackHandler一次处理一行。该模板将处理大型结果集的内存问题。