Posted on 2010-06-22 20:35
FineReport——報表技術領跑者 閱讀(650)
評論(0) 編輯 收藏 所屬分類:
Java報表問題解答
SQLServer2005獲取大數據集時內存不足FineReport報表軟件的解決辦法
一. 問題描述:
使用 SQL Server jdbc讀取SQLServer2005中的大數據量表時,如數據量達到20萬時,發生如下類似錯誤:

二. 原因:
發生該情況與sqlserver jdbc驅動的select Method有關。selectMethod分為direct和cursor。當使用direct時,驅動會一次性載入所有結果集到jvm內存中,因此造成了out of memory;而使用cursor時,會在服務器端創建一個cursor,因此不會占據客戶端的大量內存。
注意:此問題只存在于MS SQLSERVER,其它關系型數據庫無此問題
三. 解決辦法:
修改SQLServer2005 jdbc的URL:
jdbc:sqlserver://192.168.100.118:1433;databaseName=test;selectMethod=cursor
如下圖:

但這種方式會影響整個應用程序,可能引起其他普通情況的讀取性能下降。