行フェッチサイズを設定する通常の方法は次のとおりです。
-
java.sql.Connection経由 ベンダー実装クラスカスタムメソッド (例:OracleConnection.setDefaultRowPrefetch) -
java.sql.Statement.setFetchSize(int)経由 :すべてのResultSetsの行フェッチサイズに関するヒントをドライバーに提供します このStatementから取得 。このメソッドはPreparedStatementに継承されます およびCallableStatement。ほとんどのJDBCドライバーはそれをサポートしています。 -
java.sql.ResultSet.setFetchSize(int)経由 :このすべてのResultSetの行フェッチサイズに関するヒントをドライバーに提供します 。
MS SQL Server JDBCドライバーは、次のいずれの方法もサポートしていません。
- MSSQLドライバーにはそのようなメソッドはありません。
- 残念ながら、ほとんどのドライバーはヒントを尊重しますが、MSSQLドライバーは尊重しません。だからあなたには役に立たない。 Statement.setFetchSize(nSize)メソッドの実際の機能を参照してください。 SQL Server JDBCドライバーで実行しますか?
Statementと同じ問題 。
デフォルトでは、すべてを取得します JDBCドライバーでカーソルタイプを指定しない限り、データベースの行。 MSSQLドライバーは、通常の方法を使用してフェッチサイズを直接制御することはできません。
解決策:
StatementをキャストしますSQLServerStatementへsetMaxRows(int)メソッドを使用します 。標準的な方法でこれを実装しなかった理由Steve Ballmer 知っているだけです;^) - カーソルタイプを使用してドライバーを作成します。カーソルのデフォルトのフェッチサイズは1です。
Connectionを設定します 文字列プロパティselectMethod=cursor。または、Statementを作成することもできますcom.microsoft.sqlserver.jdbc.SQLServerResultSet.TYPE_SS_SERVER_CURSOR_FORWARD_ONLYを使用 前方専用、読み取り専用アクセスのスクロール可能性、およびsetFetchSizeを使用 パフォーマンスを調整する方法。 https://technet.microsoft.com/en -us / library / aa342344%28SQL.90%29.aspx - (独自の)SQLを使用して、返される行数を制限します(フェッチサイズの設定と同じではありません ):
SET ROWCOUNTまたはSELECT TOP N - オープンソースのjTDSに切り替えます SQLServerドライバーの問題を克服するために特別に作成されたドライバー。優れたドライバーです。