As formas usuais de definir o tamanho da busca de linha são:
- Através de
java.sql.Connectionclasse 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 osResultSetsobtido a partir destaStatement. Este método é herdado porPreparedStatementeCallableStatement. 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
StatementparaSQLServerStatemente 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
Connectionpropriedade stringselectMethod=cursor. Alternativamente, você pode criar aStatementcomcom.microsoft.sqlserver.jdbc.SQLServerResultSet.TYPE_SS_SERVER_CURSOR_FORWARD_ONLYrolagem para acesso somente leitura e encaminhamento e, em seguida, use osetFetchSizemétodo para ajustar o desempenho. https://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 ROWCOUNTouSELECT TOP N - Mudar para jTDS de código aberto driver, feito especialmente para superar os problemas do driver SQL Server. É um driver superior.