次の方法で共有


入力パラメーターがあるストアド プロシージャの使用

JDBC ドライバーのダウンロード

呼び出すことができる SQL Server ストアド プロシージャは、1 つ以上の IN パラメーター (ストアド プロシージャにデータを渡すために使用できるパラメーター) を含むものです。 Microsoft JDBC Driver for SQL Server が提供する SQLServerPreparedStatement クラスを使用して、この種類のストアド プロシージャを呼び出し、返されるデータを処理できます。

JDBC ドライバーを使用して IN パラメーターがあるストアド プロシージャを呼び出す場合は、call SQL エスケープ シーケンスを、SQLServerConnection クラスの prepareCall メソッドと一緒に使用する必要があります。 IN パラメーターを持つ call エスケープ シーケンスの構文は次のとおりです。

{call procedure-name[([parameter][,[parameter]]...)]}

注意

SQL エスケープ シーケンスの詳細については、「SQL エスケープ シーケンスの使用」を参照してください。

callエスケープ シーケンスを構築するときは、? (疑問符) 文字を使用して IN パラメーターを指定します。 この文字は、ストアド プロシージャに渡されるパラメーター値のプレースホルダーとして機能します。 パラメーターの値を指定するには、SQLServerPreparedStatement クラスの setter メソッドの 1 つを使用できます。 IN パラメーターのデータ型によって、使用できるセッター メソッドが決まります。

setter メソッドに値を渡すときは、パラメーターで使用される実際の値だけでなく、ストアド プロシージャ内でのパラメーターの序数の配置も指定する必要があります。 たとえば、ストアド プロシージャに 1 つの IN パラメーターが含まれている場合、その序数の値は 1 になります。 ストアド プロシージャに 2 つのパラメーターが存在する場合、1 つ目の序数値は 1 に、2 つ目の序数値は 2 になります。

IN パラメーターを含むストアド プロシージャを呼び出す方法の例として、AdventureWorks2025 サンプル データベースで uspGetEmployeeManagers ストアド プロシージャを使用します。 このストアド プロシージャは EmployeeID という名前の入力パラメーターを 1 つ受け入れます。このパラメーターは整数値で、指定された EmployeeID に基づいて従業員およびそのマネージャーの再帰的にリストを返します。 このストアド プロシージャの Java コードは次のとおりです。

public static void executeSprocInParams(Connection con) throws SQLException {  
    try(PreparedStatement pstmt = con.prepareStatement("{call dbo.uspGetEmployeeManagers(?)}"); ) {  

        pstmt.setInt(1, 50);  
        ResultSet rs = pstmt.executeQuery();  

        while (rs.next()) {  
            System.out.println("EMPLOYEE:");  
            System.out.println(rs.getString("LastName") + ", " + rs.getString("FirstName"));  
            System.out.println("MANAGER:");  
            System.out.println(rs.getString("ManagerLastName") + ", " + rs.getString("ManagerFirstName"));  
            System.out.println();  
        }  
    }
}

関連項目

ストアド プロシージャでステートメントを使用する準備済みステートメント パラメーターのパフォーマンス