2013-07-22 45 views
0

我是新来的SQL(使用PostgreSQL),我写了一个Java程序,从一个大表中选择并执行一些功能。问题是,当我运行程序时,我得到一个java OutOfMemoryError,因为表太大了。我知道我可以使用LIMIT操作符从表格的开始处进行选择,但是有没有办法通过LIMIT命令从一个特定的索引处开始选择?谢谢!从一个以某个索引开始的SQL表中选择?

+2

DBMS你是否使用的是RDBMS使用的是什么 –

+0

请注明? – Hiten004

+0

请尝试以下操作之一:https://www.google.com/search?q=mysql+paging –

回答

2

在有偏移选项的Postgres为:

select from table 
offset 50 
limit 50 
0

对于MySQL可以使用follwoing方法:

  1. SELECT * FROM表LIMIT {}偏移,ROW_COUNT
  2. SELECT * FROM表WHERE ID> {max_id_from_the previous_selection} LIMIT ROW_COUNT。第一个max_id_from_the_selection = 0.
0

这实际上是jdbc驱动程序为您处理透明的东西。您可以实际流式传输结果集,而不是立即将其全部加载到内存中。要做到这一点在MySQL中,你需要在这里按照指示:http://javaquirks.blogspot.com/2007/12/mysql-streaming-result-set.html

基本上当你创建你调用各种Connection.prepareStatement你需要传递ResultSet.TYPE_FORWARD_ONLYResultSet.CONCUR_READ_ONLY作为第二个和第三个参数,那么你的PreparedStatement对象上调用setFetchSize(Integer.MIN_VALUE)

也有类似的说明与其他数据库做到这一点,我可以迭代,如果需要的话。

编辑:现在我们知道你需要PostgreSQL的指令。按照这里的说明:How to read all rows from huge table?

相关问题