行フェッチサイズを設定する通常の方法は次のとおりです。
-
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
を使用 パフォーマンスを調整する方法。 http://technet.microsoft.com/en -us / library / aa342344%28SQL.90%29.aspx - (独自の)SQLを使用して、返される行数を制限します(フェッチサイズの設定と同じではありません ):
SET ROWCOUNT
またはSELECT TOP N
- オープンソースのjTDSに切り替えます SQLServerドライバーの問題を克服するために特別に作成されたドライバー。優れたドライバーです。