SQLServer2005獲取大數(shù)據(jù)集時(shí)內(nèi)存不足FineReport報(bào)表軟件的解決辦法
一. 問(wèn)題描述:
使用 SQL Server jdbc讀取SQLServer2005中的大數(shù)據(jù)量表時(shí),如數(shù)據(jù)量達(dá)到20萬(wàn)時(shí),發(fā)生如下類似錯(cuò)誤:

二. 原因:
發(fā)生該情況與sqlserver jdbc驅(qū)動(dòng)的select Method有關(guān)。selectMethod分為direct和cursor。當(dāng)使用direct時(shí),驅(qū)動(dòng)會(huì)一次性載入所有結(jié)果集到jvm內(nèi)存中,因此造成了out of memory;而使用cursor時(shí),會(huì)在服務(wù)器端創(chuàng)建一個(gè)cursor,因此不會(huì)占據(jù)客戶端的大量?jī)?nèi)存。
注意:此問(wèn)題只存在于MS SQLSERVER,其它關(guān)系型數(shù)據(jù)庫(kù)無(wú)此問(wèn)題
三. 解決辦法:
修改SQLServer2005 jdbc的URL:
jdbc:sqlserver://192.168.100.118:1433;databaseName=test;selectMethod=cursor
如下圖:

但這種方式會(huì)影響整個(gè)應(yīng)用程序,可能引起其他普通情況的讀取性能下降。