Las formas habituales de establecer el tamaño de búsqueda de fila son:
- A través de
java.sql.Connection
clase de implementación del proveedor método personalizado (por ejemplo,OracleConnection.setDefaultRowPrefetch
) - A través de
java.sql.Statement.setFetchSize(int)
:da una pista al controlador sobre el tamaño de búsqueda de fila para todos losResultSets
obtenido de estaStatement
. Este método es heredado porPreparedStatement
yCallableStatement
. La mayoría de los controladores JDBC lo admiten. - A través de
java.sql.ResultSet.setFetchSize(int)
:le da una pista al controlador sobre el tamaño de búsqueda de fila para todo esteResultSet
.
El controlador JDBC de MS SQL Server no es compatible con ninguna de estas formas:
- El controlador MSSQL no tiene ese método.
- Desafortunadamente, aunque la mayoría de los controladores respetan la sugerencia, el controlador MSSQL no lo hace. Así que no te sirve. Consulte ¿Qué hace realmente el método Statement.setFetchSize(nSize)? hacer en el controlador JDBC de SQL Server?
- El mismo problema que
Statement
.
Por defecto recupera todos las filas de la base de datos a menos que especifique el tipo de cursor en el controlador JDBC. El controlador MSSQL no puede controlar directamente el tamaño de búsqueda utilizando los métodos habituales.
Soluciones:
- Emita su
Statement
aSQLServerStatement
y usa el métodosetMaxRows(int)
. ¿Por qué no implementaron esto dentro del método estándar? =http://www.tumblr.com/tagged/steve%2520ballmer&h=262&w=350&sz=11&tbnid=ak2TvZnMnRH8LM:&tbnh=80&tbnw=107&zoom=1&usg=__KjSV0eUmtcZvsCEnIS8_6YsIRLs=&docid=vEFAfBz2chaT3M&sa=X&ei=1M-BUd3TG8uuiQeF84H4Bg&ved=0CIIEEP4dMDc">Steve Ballmer solo sabe;^) - Cree su controlador con un tipo de cursor. El tamaño de búsqueda predeterminado para un cursor es 1. Establezca la
Connection
propiedad de cadenaselectMethod=cursor
. Alternativamente, puede crear laStatement
concom.microsoft.sqlserver.jdbc.SQLServerResultSet.TYPE_SS_SERVER_CURSOR_FORWARD_ONLY
capacidad de desplazamiento para acceso de solo avance y solo lectura, y luego use elsetFetchSize
método para ajustar el rendimiento. http://technet.microsoft.com/en -us/library/aa342344%28SQL.90%29.aspx - Utilice SQL (propietario) para limitar el número de filas devueltas (no es lo mismo que establecer el tamaño de recuperación ):
SET ROWCOUNT
oSELECT TOP N
- Cambiar a fuente abierta jTDS controlador, especialmente diseñado para superar los problemas del controlador de SQL Server. Es un conductor superior.