次の方法で共有


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

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 つを使用できます。 使用できる setter メソッドは、IN パラメーターのデータ型で決まります。

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

IN パラメーターを含むストアド プロシージャを呼び出す方法の例として、AdventureWorks2022 サンプル データベースで 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();  
        }  
    }
}

関連項目

ストアド プロシージャでのステートメントの使用