web-dev-qa-db-ja.com

JDBCMSSQLからの戻り値の取得

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パラメータは戻り値と同じではありません。

12
Ryan Elkins

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を使用して取得する必要があります。私はこの方法をテストしましたが、機能します。

35
Ryan Elkins
c.prepareCall("? = ..");
cs.execute();
String returnedValue = cs.getString(1);

(または適切なタイプのメソッド。代わりにgetObjectを使用できます)

から 古い入門チュートリアル

callableStatementのgetXXXメソッドは、OUTパラメータから値を取得したり、ストアドプロシージャの値を返したりします。

(ところで、Umeshによって提供されたリンクにはこの種の情報がありました。)

2
Bozho