Spec-Zone.ru › MySQL Connectors 1.0

7.3 Использование JDBC CallableStatements для выполнения хранимых процедур

Connector/J полностью реализует интерфейс java.sql.CallableStatement.

Для получения дополнительной информации о хранимых процедурах MySQL, обратитесь к .

Connector/J предоставляет функциональность хранимых процедур через интерфейс JDBC CallableStatement.

Следующий пример демонстрирует хранимую процедуру, возвращающую значение inOutParam, увеличенное на 1, и строку, переданную с помощью inputParam в качестве ResultSet:

Пример 7.3 Connector/J: Вызов хранимых процедур

CREATE PROCEDURE demoSp(IN inputParam VARCHAR(255), \
                        INOUT inOutParam INT)
BEGIN
    DECLARE z INT;
    SET z = inOutParam + 1;
    SET inOutParam = z;

    SELECT inputParam;

    SELECT CONCAT('zyxw', inputParam);
END


Для использования процедуры demoSp с Connector/J, выполните следующие шаги:

  1. Подготовьте вызываемый оператор с помощью Connection.prepareCall().

    Обратите внимание, что вам необходимо использовать синтаксис экранирования JDBC, и скобки вокруг заполнитель параметров не являются необязательными:

    Пример 7.4 Connector/J: Использование Connection.prepareCall()

    import java.sql.CallableStatement;
    
    ...
    
        //
        // Prepare a call to the stored procedure 'demoSp'
        // with two parameters
        //
        // Notice the use of JDBC-escape syntax ({call ...})
        //
    
        CallableStatement cStmt = conn.prepareCall("{call demoSp(?, ?)}");
    
    
    
        cStmt.setString(1, "abcdefg");
    

    Примечание

    Connection.prepareCall() является дорогостоящим методом, из-за извлечения метаданных, которое выполняет драйвер для поддержки выходных параметров. По соображениям производительности, минимизируйте ненужные вызовы к Connection.prepareCall(), повторно используя экземпляры CallableStatement в вашем коде.

  2. Зарегистрируйте выходные параметры (если они существуют)

    Для получения значений выходных параметров (параметров, указанных как OUT или INOUT при создании хранимой процедуры), JDBC требует, чтобы они были указаны до выполнения оператора с помощью различных методов registerOutputParameter() в интерфейсе CallableStatement:

    Пример 7.5 Connector/J: Регистрация выходных параметров

    import java.sql.Types;
    ...
    //
    // Connector/J supports both named and indexed
    // output parameters. You can register output
    // parameters using either method, as well
    // as retrieve output parameters using either
    // method, regardless of what method was
    // used to register them.
    //
    // The following examples show how to use
    // the various methods of registering
    // output parameters (you should of course
    // use only one registration per parameter).
    //
    
    //
    // Registers the second parameter as output, and
    // uses the type 'INTEGER' for values returned from
    // getObject()
    //
    
    cStmt.registerOutParameter(2, Types.INTEGER);
    
    //
    // Registers the named parameter 'inOutParam', and
    // uses the type 'INTEGER' for values returned from
    // getObject()
    //
    
    cStmt.registerOutParameter("inOutParam", Types.INTEGER);
    ...
    


  3. Установите входные параметры (если они существуют)

    Входные и входно-выходные параметры устанавливаются как для объектов PreparedStatement. Однако, CallableStatement также поддерживает установку параметров по имени:

    Пример 7.6 Connector/J: Установка CallableStatement входных параметров

    ...
    
        //
        // Set a parameter by index
        //
    
        cStmt.setString(1, "abcdefg");
    
        //
        // Alternatively, set a parameter using
        // the parameter name
        //
    
        cStmt.setString("inputParam", "abcdefg");
    
        //
        // Set the 'in/out' parameter using an index
        //
    
        cStmt.setInt(2, 1);
    
        //
        // Alternatively, set the 'in/out' parameter
        // by name
        //
    
        cStmt.setInt("inOutParam", 1);
    
    ...
    


  4. Выполните CallableStatement и получите любые наборы результатов или выходные параметры.

    Хотя CallableStatement поддерживает вызов любого из методов выполнения Statement (executeUpdate(), executeQuery() или execute()), наиболее гибким методом для вызова является execute(), так как вам не нужно знать заранее, возвращает ли хранимая процедура наборы результатов:

    Пример 7.7 Connector/J: Получение результатов и значений выходных параметров

    ...
    
        boolean hadResults = cStmt.execute();
    
        //
        // Process all returned result sets
        //
    
        while (hadResults) {
            ResultSet rs = cStmt.getResultSet();
    
            // process result set
            ...
    
            hadResults = cStmt.getMoreResults();
        }
    
        //
        // Retrieve output parameters
        //
        // Connector/J supports both index-based and
        // name-based retrieval
        //
    
        int outputValue = cStmt.getInt(2); // index-based
    
        outputValue = cStmt.getInt("inOutParam"); // name-based
    
    ...
    


© 2025 Oracle
Licensed under the GPLv2 License.
https://docs.oracle.com/cd/E17952_01/connector-j-en/connector-j-usagenotes-statements-callable.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API