我正在使用java swing查询包含数百万条记录的历史表。所以完成这项工作需要20分钟。直到我需要显示jProgressBar或其他东西来向用户显示查询仍在运行。怎么做?另外如何找到进度条的最大数量?由于它有数百万行,所以我无法使用总行数。请asvise。除了jProgressbar之外,还建议任何其他选项。
答案 0 :(得分:0)
不是一次获取所有记录,而是在块中获取数据。
现在,一旦在chuck大小和记录总数中收到数据,就会增加进度条。
如果没有数百万的记录,那么在单个事务中获取所有数据并不是一个好方法。有时会导致OutOfMemoryError
和Transaction TimedOut
。
如果可能,请将您的应用程序设计为以分页显示数据更高效,不需要20分钟以使最终用户满意。
请查看以下链接以完成此操作:
以分块形式读取数据的示例查询:
select *
from (select q.*, rownum rnum
from ( [your query goes here] ) q
where rownum <= chunk_number * chunk_size )
where rnum >= ( chunk_number -1) * chunk_size + 1