2017-01-13 4 views
-1

JavaでCallable文を使用するプロシージャ・コールで、 'inまたはoutパラメータがインデックスにありません:7'という予期しないエラーが発生しました。 プロシージャコールごとに、接続を終了していません。これは問題ですか?IBM Websphereポータル・サーバーでの閉鎖されていないOracle接続

注:コードの実装は、プロシージャを呼び出す直接コードではありません。私たちはDBコールを処理する内部フレームワークを持っているので、完全なコードを投稿するのは難しいです。

+0

役に立つと感じたら答えを受け入れる – MozenRath

答えて

0

接続を自分で作成していない限り、接続を閉じる必要はありません。ただし、CallableStatementを終了する必要があります。

また、inまたはoutパラメータが欠落していると、呼び出し可能ステートメントで指定された数またはパラメータと比較したときに、プロシージャにより多くのパラメータがバインドされている必要があります。

上記の場合に当てはまらない場合は、ステートメント内のパラメーターをバインドしていないために表示されている可能性があります。

例:

call MY_PROC(?,?)

あなたはそれのためのJavaコードで2つのパラメータをバインドする必要があります。しかし、常に起こるわけではないと言われているように、おそらくパラメータ束縛の1つが、エラーが発生したときに満たされない状態にあるかもしれません。

+0

プロシージャから渡され受け入れられたパラメータの数が等しい。 – Hareesh

+0

常に例外をスローしていない – Hareesh

+0

あなたはhttp://stackoverflow.com/questions/27342697/missing-in-or-out-parameter-at-index-1-error-in-java-oracle – MozenRath

1

コードスニペットが不足している(投稿できると便利です)可能性のある原因についてのみ推測できます。 inoutパラメータで指摘する点の1つは、それらの入力値を設定する必要があることです。statement.setX(n、value)は、出力パラメータとしてstatement.registerOutParameter(n、type)を使用するたびに登録します。より完全な例については、Oracle JDBCのドキュメントから、このリンクを参照してください:

http://docs.oracle.com/javadb/10.10.1.2/ref/rrefjdbc75719.html

あなたはまた、呼び出しが含まれ、WebSphere Application Serverのデータソースは、(CallableStatement.close時に)デフォルトではCallableStatementsをキャッシュ認識することになるでしょうCallableStatement.clearParametersは、パラメータ値をクリアし、それらが保持するリソースを解放する効果があります。 outパラメータの登録もクリアされる可能性があります。ステートメント・キャッシュを使用不可にすることを試すには、データ・ソースでstatementCacheSize = 0を構成します。代わりに、JDBC 4.0以降を使用する場合は、個々のステートメントをCallableStatement.setPoolable(false)を使用してキャッシュ不可能にすることができます。明確にするために、私は解決策としての文キャッシュを無効にすることを推奨していません。原因を絞り込むための実験としてのみです。

+0

を実行しています。コードの実装はプロシージャを呼び出す直接コードではありません。私たちはDBコールを処理する内部フレームワークを持っているので、完全なコードを投稿するのは難しいです。しかし、あなたの答えは実装の解決に役立ちます。あなたの提案に基づいて解決されたら、あなたの答えを除きます。 – Hareesh

関連する問題