Java callablestatement in out parameters

JDBC: CallableStatement

Java.sql.CallableStatement используется для вызова хранимых процедур в базе данных.

Хранимая процедура похожа на функцию или метод в классе, за исключением того, что она находится в базе данных. Некоторые тяжелые операции с базой данных могут выиграть в производительности от выполнения в том же пространстве памяти, что и сервер базы данных, в качестве хранимой процедуры.

Создание CallableStatement

Вы создаете экземпляр CallableStatement, вызывая метод prepareCall() для объекта подключения. Вот пример:

CallableStatement callableStatement = connection.prepareCall("");

Если хранимая процедура возвращает ResultSet, и вам нужен ResultSet не по умолчанию(например, с другими характеристиками удерживаемости, параллелизма и т. Д.), Вам нужно будет указать эти характеристики уже при создании CallableStatement. Вот пример:

CallableStatement callableStatement = connection.prepareCall("", ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_READ_ONLY, ResultSet.CLOSE_CURSORS_OVER_COMMIT );

Установка значений параметров

После создания CallableStatement очень похож на PreparedStatement. Например, вы можете установить параметры в SQL, в тех местах, где вы ставите? , Вот пример:

CallableStatement callableStatement = connection.prepareCall(""); callableStatement.setString(1, "param1"); callableStatement.setInt (2, 123);

Выполнение CallableStatement

После того, как вы установили значения параметров, которые вам нужно установить, вы готовы выполнить CallableStatement. Вот как это делается:

ResultSet result = callableStatement.executeQuery();

Метод executeQuery() используется, если хранимая процедура возвращает ResultSet.

Если хранимая процедура просто обновляет базу данных, вы можете вместо этого вызвать метод executeUpdate(), например:

callableStatement.executeUpdate();

Пакетные обновления

Вы можете сгруппировать несколько вызовов хранимой процедуры в пакетное обновление. Вот как это делается:

CallableStatement callableStatement = connection.prepareCall(""); callableStatement.setString(1, "param1"); callableStatement.setInt (2, 123); callableStatement.addBatch(); callableStatement.setString(1, "param2"); callableStatement.setInt (2, 456); callableStatement.addBatch(); int[] updateCounts = callableStatement.executeBatch();

Параметры OUT

Хранимая процедура может возвращать параметры OUT. То есть значения, которые возвращаются вместо ResultSet или в дополнение к нему. После выполнения CallableStatement вы можете получить доступ к этим параметрам OUT из объекта CallableStatement. Вот пример:

CallableStatement callableStatement = connection.prepareCall(""); callableStatement.setString(1, "param1"); callableStatement.setInt (2, 123); callableStatement.registerOutParameter(1, java.sql.Types.VARCHAR); callableStatement.registerOutParameter(2, java.sql.Types.INTEGER); ResultSet result = callableStatement.executeQuery(); while(result.next()) < . >String out1 = callableStatement.getString(1); int out2 = callableStatement.getInt (2);

Рекомендуется сначала обработать ResultSet, прежде чем пытаться получить доступ к любым параметрам OUT. Это рекомендуется по причинам совместимости базы данных.

Читайте также:  If and else php примеры

Источник

How do I register out parameter in CallableStatement?

This example show you how to register out parameter for executing a stored procedure using the CallableStatement.registerOutParameter() method call. We must register the out parameters before the query execution. The registerOutParameter() method takes two parameters, the index of the parameter and the sql data type of the out parameter.

package org.kodejava.jdbc; import java.sql.*; public class RegisterOutParameter < private static final String URL = "jdbc:mysql://localhost/kodejava"; private static final String USERNAME = "root"; private static final String PASSWORD = ""; public static void main(String[] args) < try (Connection connection = DriverManager.getConnection(URL, USERNAME, PASSWORD)) < // Creates a CallableStatement for executing the stored // procedure String query = "call Get_Product_Detail_By_Name(?, ?, ?)"; CallableStatement cb = connection.prepareCall(query); // Sets the input parameter cb.setString(1, "Data Structures, Algorithms"); // Registers the out parameters cb.registerOutParameter(2, Types.VARCHAR); cb.registerOutParameter(3, Types.DECIMAL); // Executes the query cb.executeQuery(); // Gets the query result output System.out.println("Name : " + cb.getString(1)); System.out.println("Code : " + cb.getString(2)); System.out.println("Price : " + cb.getBigDecimal(3)); >catch (SQLException e) < e.printStackTrace(); >> > 

Here is the MySQL stored procedure that we call in the code above.

DELIMITER ;; DROP PROCEDURE IF EXISTS `Get_Product_Detail_By_Name`;; CREATE PROCEDURE `Get_Product_Detail_By_Name`( INOUT product_name VARCHAR(50), OUT product_code VARCHAR(10), OUT product_price DECIMAL(10, 2)) BEGIN SELECT code INTO product_code FROM products WHERE name = product_name; SELECT price INTO product_price FROM products WHERE name = product_name; END;; DELIMITER ; 

Maven dependencies

 com.mysql mysql-connector-j 8.0.33  

Источник

Оцените статью