1

私はJavaを使用してmssql2012DBにアクセスしています

パラメータに1つだけ(たとえば@ p1という名前)を取り、単一の結果セットを返すストアドプロシージャ「procX」があります。結果セットを取得する前に戻り値を読み取ろうとしない限り、正常に機能します。コードは以下のとおりです。「//」を削除して戻り値を取得するnullと、結果として取得されます。

cs = con.prepareCall("{? = call procX(?)}");
cs.registerOutParameter(1, Types.INTEGER);
cs.setInt("p1", 1);
cs.execute();         
//cs.getInt(1);
rs = cs.getResultSet();

また、結果セットを取得した後で戻り値を読み取った場合でも、これにより結果セットが閉じられます。

結果セットを取得できなくても戻り値を読み取る方法はありますか?

そして、私が見る限り、この状況は戻り値に制限されておらず、他の出力パラメーターでも発生します。

4

2 に答える 2

1

出力パラメータを読み取る前に、結果セットを取得する必要があるようです。

あなたはhttps://stackoverflow.com/a/5576442/1519458から詳細を得ることができます

于 2013-02-04T09:20:28.683 に答える
0

それは面白いです、

  • まず、使用しているドライバーの種類はわかりませんが、変更して情報を提供してみてください。同じ動作かどうかは同じです。
  • 次に、SQLServer用のMicrosoftJDBCドライバーを使用している場合は、ロガーを調整して問題の場所を確認します。このライブラリは、 java.util.logging.Logger各操作の実行前/実行後にログに使用します。
  • Java 7を使用していると思いますが、Java 6でダウングレードして実行してみてください。なぜですか?getValueメソッドから呼び出されたメソッドのSQLServer用MicrosoftJDBCドライバーには、いくつかの興味深いロジック(Closeableインターフェイスを使用)があるためgetIntです。
于 2013-02-04T03:03:12.613 に答える