SQLServer2005獲取大數(shù)據(jù)集時內(nèi)存不足FineReport報表軟件的解決辦法
Posted on 2010-06-22 20:35 FineReport——報表技術(shù)領(lǐng)跑者 閱讀(656) 評論(0) 編輯 收藏 所屬分類: Java報表問題解答SQLServer2005獲取大數(shù)據(jù)集時內(nèi)存不足FineReport報表軟件的解決辦法
一. 問題描述:
使用 SQL Server jdbc讀取SQLServer2005中的大數(shù)據(jù)量表時,如數(shù)據(jù)量達(dá)到20萬時,發(fā)生如下類似錯誤:
二. 原因:
發(fā)生該情況與sqlserver jdbc驅(qū)動的select Method有關(guān)。selectMethod分為direct和cursor。當(dāng)使用direct時,驅(qū)動會一次性載入所有結(jié)果集到jvm內(nèi)存中,因此造成了out of memory;而使用cursor時,會在服務(wù)器端創(chuàng)建一個cursor,因此不會占據(jù)客戶端的大量內(nèi)存。
注意:此問題只存在于MS SQLSERVER,其它關(guān)系型數(shù)據(jù)庫無此問題
三. 解決辦法:
修改SQLServer2005 jdbc的URL:
jdbc:sqlserver://192.168.100.118:1433;databaseName=test;selectMethod=cursor
如下圖:
但這種方式會影響整個應(yīng)用程序,可能引起其他普通情況的讀取性能下降。