Работа с базами данных в JAVA на основе соединения JDBC

Информация - Компьютеры, программирование

Другие материалы по предмету Компьютеры, программирование

? операнд соответствует типу параметра (VARCHAR), третий операнд устанавливает размер параметра. Типы параметров прописываются в пакете java.sql.*. Другие типы параметров приведены в таблице 1, где указано таккже их соответствие типам Java.

Таблица 1

 

JDBC -типJava - тип CHAR String VARCHAR String LONGVARCHAR String NUMERIC java.math.BigDecimal DECIMAL java.math.BigDecimal BIT boolean TINYINT byte SMALLINT short INTEGER int BIGINT long REAL float FLOAT double DOUBLE double BINARY byte[] VARBINARY byte[] LONGVARBINARY byte[] DATE java.sql.Date TIME java.sql.Time TIMESTAMP java.sql.Timestamp

Выполнение процедуры реализуется командой

cst.execute();

 

Для получения значения, возвращаемого процедурой или функций следует использовать такой синтаксис определения вызова:

{? = call procedure_name[(?, ?, ...)]}

 

При передаче входных параметров в хранимую процедуру их следует предварительно установить. Это делается с помощью метода setXXX.

Рассмотрим следующую хранимую процедуру.

 

CREATE PROCEDURE [dbo].proc2 @nomer int , @name char(30) OUTPUT, @group int OUTPUT

AS

BEGIN

DECLARE @mycur CURSOR

SET @mycur=CURSOR SCROLL STATIC FOR

SELECT * from we

Open @mycur

IF (@@CURSOR_ROWS<@nomer)

BEGIN

SET @name="#"

SET @group=-1

RETURN 1

END

ELSE

BEGIN

FETCH ABSOLUTE @nomer FROM @mycur INTO @name,@group

 

RETURN 0

END

END

GO

 

Заголовок этой процедуры имеет такой вид:

 

CREATE PROCEDURE [dbo].proc2 @nomer int , @name char(30) OUTPUT, @group int OUTPUT

 

Из него видно, что процедура получает один входной параметр nomer (номер записи) и возвращает два выходных параметра name (имя) и group (группу).

 

Теперь приведем текст java-приложения, которое вызывает данную хранимую процедуру.

 

import java.awt.*;

import java.net.*;

import java.sql.*;

import java.io.*;

 

public class lab6

{

public static void main(String args[])

{

String url="jdbc:odbc:sqlsource2";

try{

Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");}

catch(Exception e)

{System.out.println("Classdefnotfound"+e);

}

try{

Connection db=DriverManager.getConnection(url);

CallableStatement cst= db.prepareCall("{call proc2(?,?,?)}");

cst.setInt(1,1);

cst.registerOutParameter(2, Types.VARCHAR,16);

cst.registerOutParameter(3, Types.INTEGER);

cst.execute();

String str=cst.getString(2)+" =="+cst.getInt(3);

System.out.println(str);// выводим ответ процедуры на экран

System.out.println("OK");

db.close(); //Закрываем соединение.

}

catch(Exception er)

{System.out.println("Error has arised here:"+er);}

 

}

}

 

Обратим внимание на установку единственного входного параметра:

 

cst.setInt(1,1);

 

Первый операнд этой команды задает номер параметра, второй его значение. Получение значений возвращаемых процедурой, выполняется командой

 

String str=cst.getString(2)+" =="+cst.getInt(3);

 

Здесь формируется строка, состоящая из двух выходных параметров, получаемых с помощью метода getXXX(n) , где n номер параметра.

В заключение отметим, что параметры могут иметь тип INOUT, т.е. быть одновременно входными и выходными. Параметр такого типа перед вызовом процедуры должен получить значение и быть зарегистрированным.

ЛИТЕРАТУРА

  1. Меградж З. Разработка приложений для электронной коммерции на ORACLE и JAVA. Вильямс, 2000, 328с.
  2. Пирогов В.П. MS SQL Server 2000. Управление и программирование. СПб. БХВ.-2005,-600с.
  3. Холл М., Браун Л. Программирование для WEB. Вильямс, 2002, - 1280с.