As formas usuais de definir o tamanho da busca de linha são:
- Através de
java.sql.Connection
classe de implementação do fornecedor método personalizado (por exemplo,OracleConnection.setDefaultRowPrefetch
) - Através de
java.sql.Statement.setFetchSize(int)
:dá uma dica ao driver sobre o tamanho da busca de linha para todos osResultSets
obtido a partir destaStatement
. Este método é herdado porPreparedStatement
eCallableStatement
. A maioria dos drivers JDBC é compatível. - Através de
java.sql.ResultSet.setFetchSize(int)
:dá uma dica ao driver quanto ao tamanho da busca de linha para todo esteResultSet
.
O driver JDBC do MS SQL Server não suporta nenhuma destas formas:
- O driver MSSQL não possui esse método.
- Infelizmente, enquanto a maioria dos drivers respeita a dica, o driver MSSQL não. Então não é útil para você. Consulte O que realmente significa o método Statement.setFetchSize(nSize) fazer no driver JDBC do SQL Server?
- Mesmo problema que
Statement
.
Por padrão, ele recupera todos as linhas do banco de dados, a menos que você especifique o tipo de cursor no driver JDBC. O driver MSSQL não pode controlar diretamente o tamanho da busca usando os métodos usuais.
Soluções:
- Transmita seu
Statement
paraSQLServerStatement
e use o métodosetMaxRows(int)
. Por que eles não implementaram isso no método padrão Steve Ballmer só sabe;^) - Crie seu driver com um tipo de cursor. O tamanho de busca padrão para um cursor é 1. Defina a
Connection
propriedade stringselectMethod=cursor
. Alternativamente, você pode criar aStatement
comcom.microsoft.sqlserver.jdbc.SQLServerResultSet.TYPE_SS_SERVER_CURSOR_FORWARD_ONLY
rolagem para acesso somente leitura e encaminhamento e, em seguida, use osetFetchSize
método para ajustar o desempenho. http://technet.microsoft.com/en -us/library/aa342344%28SQL.90%29.aspx - Use SQL (proprietário) para limitar o número de linhas retornadas (não é a mesma coisa que definir o tamanho da busca ):
SET ROWCOUNT
ouSELECT TOP N
- Mudar para jTDS de código aberto driver, feito especialmente para superar os problemas do driver SQL Server. É um driver superior.