sql >> Base de Datos >  >> RDS >> Sqlserver

Establezca una búsqueda previa de fila predeterminada en SQL Server utilizando el controlador JDBC

Las formas habituales de establecer el tamaño de búsqueda de fila son:

  1. A través de java.sql.Connection clase de implementación del proveedor método personalizado (por ejemplo, OracleConnection.setDefaultRowPrefetch )
  2. 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 los ResultSets obtenido de esta Statement . Este método es heredado por PreparedStatement y CallableStatement . La mayoría de los controladores JDBC lo admiten.
  3. 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 este ResultSet .

El controlador JDBC de MS SQL Server no es compatible con ninguna de estas formas:

  1. El controlador MSSQL no tiene ese método.
  2. 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?
  3. 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 a SQLServerStatement y usa el método setMaxRows(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 cadena selectMethod=cursor . Alternativamente, puede crear la Statement con com.microsoft.sqlserver.jdbc.SQLServerResultSet.TYPE_SS_SERVER_CURSOR_FORWARD_ONLY capacidad de desplazamiento para acceso de solo avance y solo lectura, y luego use el setFetchSize 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 o SELECT TOP N
  • Cambiar a fuente abierta jTDS controlador, especialmente diseñado para superar los problemas del controlador de SQL Server. Es un conductor superior.