【Java】SQL Serverのストアドプロシージャを実行しOUTパラメータを取得する
プロシージャ
DROP PROCEDURE [dbo].[P_TEST] GO CREATE PROCEDURE [dbo].[P_TEST] ( --<引数> @CODE NVARCHAR(8), -- @DATE DATETIME, -- @JRNL_AMT DECIMAL(14,2), -- @RET DECIMAL(5,0) OUTPUT, --エラー番号 @RESULT_INFORMATION NVARCHAR(100) OUTPUT --結果情報 ) AS --<オプション設定> SET NOCOUNT ON --<変数初期化> SET @RET = 99999 SET @RESULT_INFORMATION = NULL IF @CODE IS NULL BEGIN SET @RET = 15634 SET @RESULT_INFORMATION = 'ERROR:15634' SET @RESULT_INFORMATION = @RESULT_INFORMATION + '[仕訳金額] はオーバーフローしました。' GOTO ERRORHANDLER END IF (@@ERROR <> 0) OR ((@RET <> 0) AND (@RET <> 99999)) BEGIN IF(@RESULT_INFORMATION <> NULL) BEGIN SET @RESULT_INFORMATION = 'P_TEST' END GOTO ERRORHANDLER END ELSE --***** 完了 *****-- BEGIN SET @RET = 0 RETURN 0 END --***** エラーハンドル *****-- ERRORHANDLER: RETURN 1 GO
package test; import java.math.BigDecimal; import java.sql.CallableStatement; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Types; public class Procedure { public static void main(String[] args) { // データベース名、ユーザー名、パスワード String dbName = "testserver"; String user = "test"; String pass = "test"; Connection con = null; ResultSet rs = null; CallableStatement cs = null; String sql = "{call P_TEST(?, ?, ?, ?, ?)}"; try { // JDBCドライバを指定 Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver"); // 接続開始 con = DriverManager.getConnection("jdbc:sqlserver://" + dbName + ";", user, pass); cs = con.prepareCall(sql); // INパラメータの指定 cs.setString(1, null); cs.setTime(2, null); cs.setBigDecimal(3, BigDecimal.valueOf(100.00)); // OUTパラメータの指定 cs.registerOutParameter(4, Types.DECIMAL); cs.registerOutParameter(5, Types.NVARCHAR); // プロシージャの実行 cs.execute(); // OUTパラメータの取得 System.out.println(cs.getBigDecimal(4)); System.out.println(cs.getNString(5)); } catch(Exception e) { // コンソールに「接続エラー内容」を表示 System.err.println(e.getClass().getName() + ":" + e.getMessage()); } finally { if (rs != null) { try { rs.close(); } catch (SQLException e) { e.printStackTrace(); } } if (cs != null) { try { cs.close(); } catch (SQLException e) { e.printStackTrace(); } } if (con != null) { try { con.close(); } catch (SQLException e) { e.printStackTrace(); } } } } }