Microsoft SQL Server JDBC Driver2.0を使用してJava)経由でSQL Server(2005)に接続しています。
ストアドプロシージャから戻り値を取得するにはどうすればよいですか?私は次のようなことをしています:
Connection connection = dataSource.getConnection()
CallableStatement proc = connection.prepareCall("{ call dbo.mySproc() }");
proc.execute();
Execute()を使用する必要がありますか? executeQuery()? executeUpdate()?これらのどれもデフォルトで戻り値を返すようには見えませんが、私はそれを取得する方法が本当にわかりません。
編集1:明確にするために、私はストアドプロシージャを呼び出す方法を知っています。この質問は、(結果セットではなく)RETURNVALUEを取得する方法について具体的に説明しています。戻り値は通常、結果セットなしでクエリを実行したとき、またはSQLでRETURN 0
のようなものを具体的に記述したときに生成される整数です。
編集2:executeUpdate()はintを返しますが、このintは戻り値と同じではありません。また、OUTパラメータは戻り値と同じではありません。
Bozhoの2番目の改訂された回答は近いものでしたが、完全にはありませんでした。しかし、それは私を答えに導きました。
私が始めたコード例をとると、次のようになります。
CallableStatement proc = connection.prepareCall("{ ? = call dbo.mySproc() }");
proc.registerOutParameter(1, Types.INTEGER);
proc.execute();
int returnValue = proc.getInt(1);
ここで重要なのは、戻り値とprepareCall
の場所を設定するregisterOutputParameter
関数の「呼び出し」の前にある「?=」です。戻り値は常にintであるため、整数として登録する必要があります(少なくとも、SQL Serverでは、他のDBでは異なる場合があります)。したがって、getInt
を使用して取得する必要があります。私はこの方法をテストしましたが、機能します。
c.prepareCall("? = ..");
cs.execute();
String returnedValue = cs.getString(1);
(または適切なタイプのメソッド。代わりにgetObject
を使用できます)
から 古い入門チュートリアル
callableStatementのgetXXXメソッドは、OUTパラメータから値を取得したり、ストアドプロシージャの値を返したりします。
(ところで、Umeshによって提供されたリンクにはこの種の情報がありました。)