sql >> データベース >  >> RDS >> Sqlserver

JDBCドライバーを使用してSQLServerでデフォルトの行プリフェッチを設定します

    行フェッチサイズを設定する通常の方法は次のとおりです。

    1. java.sql.Connection経由 ベンダー実装クラスカスタムメソッド (例:OracleConnection.setDefaultRowPrefetch
    2. java.sql.Statement.setFetchSize(int)経由 :すべてのResultSetsの行フェッチサイズに関するヒントをドライバーに提供します このStatementから取得 。このメソッドはPreparedStatementに継承されます およびCallableStatement 。ほとんどのJDBCドライバーはそれをサポートしています。
    3. java.sql.ResultSet.setFetchSize(int)経由 :このすべてのResultSetの行フェッチサイズに関するヒントをドライバーに提供します 。

    MS SQL Server JDBCドライバーは、次のいずれの方法もサポートしていません。

    1. MSSQLドライバーにはそのようなメソッドはありません。
    2. 残念ながら、ほとんどのドライバーはヒントを尊重しますが、MSSQLドライバーは尊重しません。だからあなたには役に立たない。 Statement.setFetchSize(nSize)メソッドの実際の機能を参照してください。 SQL Server JDBCドライバーで実行しますか?
    3. Statementと同じ問題 。

    デフォルトでは、すべてを取得します JDBCドライバーでカーソルタイプを指定しない限り、データベースの行。 MSSQLドライバーは、通常の方法を使用してフェッチサイズを直接制御することはできません。

    解決策:

    • Statementをキャストします SQLServerStatementsetMaxRows(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ドライバーの問題を克服するために特別に作成されたドライバー。優れたドライバーです。



    1. MacportsでMySQL5.6をセットアップする

    2. SQL ServerでCREATEまたはALTERを実行するにはどうしますか?

    3. AssertionError:データベース接続がUTCに設定されていません

    4. mysqlで対応する毎月の最初の日を取得するにはどうすればよいですか?