Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Definir uma pré-busca de linha padrão no SQL Server usando o driver JDBC


As formas usuais de definir o tamanho da busca de linha são:
  1. Através de java.sql.Connection classe de implementação do fornecedor método personalizado (por exemplo, OracleConnection.setDefaultRowPrefetch )
  2. Através de java.sql.Statement.setFetchSize(int) :dá uma dica ao driver sobre o tamanho da busca de linha para todos os ResultSets obtido a partir desta Statement . Este método é herdado por PreparedStatement e CallableStatement . A maioria dos drivers JDBC é compatível.
  3. Através de java.sql.ResultSet.setFetchSize(int) :dá uma dica ao driver quanto ao tamanho da busca de linha para todo este ResultSet .

O driver JDBC do MS SQL Server não suporta nenhuma destas formas:
  1. O driver MSSQL não possui esse método.
  2. 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?
  3. 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 para SQLServerStatement e use o método setMaxRows(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 string selectMethod=cursor . Alternativamente, você pode criar a Statement com com.microsoft.sqlserver.jdbc.SQLServerResultSet.TYPE_SS_SERVER_CURSOR_FORWARD_ONLY rolagem para acesso somente leitura e encaminhamento e, em seguida, use o setFetchSize 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 ou SELECT TOP N
  • Mudar para jTDS de código aberto driver, feito especialmente para superar os problemas do driver SQL Server. É um driver superior.