Название: Java и базы данных - Методические указания (В.Н. Глазков)

Жанр: Информатика

Просмотров: 1404


Вызываемые инструкции

 

Вызываемые инструкции – это SQL-инструкции, которые вызывают хранимые процедуры (удалённые процедуры – Remote Procedure Call, C), запоминаемые в базе данных. Эти процедуры запоминаются для повторного использования из сеанса в сеанс и содержат текст SQL. Они нужны для поддержки логики приложения на стороне сервера. Инструкции, вызывающие хранимые процедуры, создаются как объекты CallableStatement.

Хранимые процедуры могут принимать множественные данные и возвращать множественные результаты, т. е. имеют два типа параметров: IN – входные и OUT -выходные. Есть специальные методы JDBC, предназначенные для задания параметров IN, задания типов (регистрации) и чтения параметров OUT.

Задание величин IN и регистрация параметров OUT должны

производиться до выполнения вызываемой инструкции. После выполнения инструкции все её параметры OUT могут быть просмотрены слева направо по одному.

Параметры IN получают значение в приложении пользователя

методами setXXX() класса CallableStatement с двумя аргуметами: индекс параметра, начинающийся с единицы, и задаваемое значе-ние. Вместо ХХХ подставляются типы Int, Float,

 

void setInt(int parameterIndex, int x);

void setFloat(int parameterIndex, float x);

void setString(int parameterIndex, String x);

void setDate(int parameterIndex, java.sql.Date x);

...

void setBinary(int parameterIndex, java.io.InputStream x,

        int length);

...

void setObject(int parameterIndex, Object x, int targetSqlType,

         int scale);

void clearParameters();

 

Метод setObject() позволяет сохранять в БД конкретные объекты Java, преобразованные в типы данных SQL. При вызове метода clearParameters() отсоединяются ресурсы, занятые текущими параметрами.

Параметры OUT регистрируют до выполнения вызываемой инструкции. Эта регистрация является способом задания их типа. Для регистрации OUT применяют следующие методы:

void registerOutParameter(int parameterIndex, int sqlType);

void registerOutParameter(int parameterIndex, int sqlType,

                    int scale);

 

где sqlType – числовой идентификатор типа параметра – берется

из констант класса java.sql.Types: CHAR, VARCHAR, INTEGER, FLOAT и т. д. Индекс параметра начинаеися с 1. scale задаёт число цифр справа от десятичной точки. Параметры OUT выбираются слева направо при помощи методов, соответствующих их типу getXXX(): byte getByte(int parameterIndex), int getInt(int parameterIndex), float getFloat(int parameterIndex), ...

//...

Connection cnct =

    DriverManager.getConnection(url, uid, pwd);

CallableStatement myStmt = cnct.PrepareCall(

   "{call my_stored_procedure ?, ?}");

// задание параметра IN (1-й ?)

myStmt.setString(1, "Ivanov");         

// регистрация типа параметра OUT (2-й ?)

myStmt.registerOutParameter(2, java.sql.Types.VARCHAR);

int res = myStmt.executeUpdate();

// получение параметра OUT в виде строки

String outParam = myStmt.getString(2);

myStmt.close();

cnct.close(); //...