2016-05-23 20 views
7

StatementとResultSetのフェッチサイズの設定の違いは何ですか? Oracleのドキュメントによれば、フェッチ・サイズがStatementに設定されている場合、フェッチ・サイズが結果セットを取得する前に設定されている限り、ResultSetでも同様に使用されます。 StatementまたはResultSetに設定した場合、どのような違いがありますか?私はOracleデータベースを使用しています。それについては、Oracleのマニュアルを次に示します。Oracle JDBCは、クエリを実行するときにStatementとResultSetのフェッチサイズの設定の違い

はデフォルトでサイズ

を取得し、それはデータベース・カーソルから一度に10行の結果セットを取得します。これは、Oracleのデフォルトのロー・フェッチ・サイズ値です。ローフェッチサイズの値を変更することによって、データベースカーソルへの各トリップで取得されたローの数を変更することができます。

標準JDBCでは、問合せの各データベース往復でフェッチされる行数を指定できます。この数をフェッチ・サイズと呼びます。 Oracle JDBCでは、行プリフェッチ値が文オブジェクトのデフォルトのフェッチ・サイズとして使用されます。フェッチサイズを設定すると、行プリフェッチの設定が上書きされ、そのステートメントオブジェクトで実行される後続のクエリに影響します。

フェッチサイズも結果セットで使用されます。ステートメント・オブジェクトが照会を実行するとき、ステートメント・オブジェクトのフェッチ・サイズは、照会によって生成された結果セット・オブジェクトに渡されます。ただし、結果セット・オブジェクトのフェッチ・サイズを設定して、渡された文のフェッチ・サイズをオーバーライドすることもできます。

答えて

4

フェッチサイズが実際に重要な場所はResultSetです。 ResultSetが作成されると、作成に使用されたStatementからフェッチサイズが取得されますが、後で変更することができます。

Statementのフェッチサイズをデフォルトとして考えると、それが作成するResultSetのすべてに渡されます。このデフォルトを使用したくない場合は、それを上書きすることができます。

1

違いはありません。ステートメントにフェッチ・サイズを設定すると、このステートメントから来るすべてのResultSetインスタンスに適用されます。

+0

若干の違いがあります。ステートメントに設定されたフェッチ・サイズは、最初のフェッチに使用されます。結果セットが返されるまでに、最初のフェッチは完了します。したがって、最初のフェッチのサイズを制御する唯一の方法は、ステートメントにそれを設定することです。特定のクエリで1つの行しか返さない場合は、結果セットのフェッチサイズを1に設定すると、コードの結果セットにアクセスする前にステートメントのフェッチサイズが既に使用されているため、何も行われませんサイズを1にフェッチします。 –

関連する問題