Помощь в написании студенческих работ
Антистрессовый сервис

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

РефератПомощь в написанииУзнать стоимостьмоей работы

Вызов хранимой процедуры выполняется посредством класса CallableStatement. Инструкция по вызову процедуры предварительно подготавливается в команде: В отличие от запросов с параметрами здесь используют класс CallableStatement. Таким образом, запрос на вызов хранимой процедуры может иметь такой вид: Первый операнд этой команды задает номер параметра, второй — его значение. Получение значений… Читать ещё >

Работа с базами данных в JAVA на основе соединения JDBC (реферат, курсовая, диплом, контрольная)

БЕЛОРУССКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ ИНФОРМАТИКИ И РАДИОЭЛЕКТРОНИКИ

кафедра информационных технологий и автоматизированных систем РЕФЕРАТ на тему:

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

Минск, 2008

Как мы знаем, SQL-запросы предварительно компилируются по месту исполнения. Следовательно, чтобы ускорить их выполнение следует компиляцию запросов выполнять предварительно. Это реализуется командой prepareStatement класса PreparedStatement. Данная команда позволяется использовать SQL-запросы с параметрами. Параметры вставляются в запросы как знак вопроса. Сначала рассмотрим, как использовать инструкцию prepareStatement на следующем примере:

try{

Connection db=DriverManager.getConnection (url);

String sq_str="SELECT * FROM stud"; //Строка запроса на выборку

PreparedStatement prst= db. prepareStatement (sq_str);

ResultSet rs= prst. executeQuery (); //Переменная rs получает набор выбранных записей

while (rs.next ()){ //Выполняем просмотр записей набора

String s=rs.getString («name»)+ ««+ rs. getInt («groupp»);

//Получаем содержимое полей name и

// groupp текущей записи

System.out.println («my-» +s);}//выводим запись на экран

System.out.println («OK»);

// db. close (); //Закрываем БД.

}

catch (Exception er)

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

}

Инструкция на выборку создается в строке

PreparedStatement prst= db. prepareStatement (sq_str);

Скомпилированный заапрос выполняется обычным образом:

ResultSet rs= prst. executeQuery ()

Теперь предположим, что мы хотим выполнить выборку студентов, чей возраст превосходит 19 лет. В этой связи нам надлежит ввести в запрос параметр. Делается это таким образом:

try{

Connection db=DriverManager.getConnection (url);

String sq_str="SELECT * FROM stud where age> ?"; //Строка запроса на //выборку с параметром

PreparedStatement prst= db. prepareStatement (sq_str);

prst.setInt (1,23); //установка значения параметра

ResultSet rs= prst. executeQuery (); //Переменная rs получает набор выбранных записей

while (rs.next ()){ //Выполняем просмотр записей набора

String s=rs.getString («name»)+ ««+ rs. getInt («groupp»);

//Получаем содержимое полей name и

// groupp текущей записи

System.out.println («my-» +s);}//выводим запись на экран

System.out.println («OK»);

// db. close (); //Закрываем БД.

}

catch (Exception er)

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

}

}

Сначала создается запрос на выборку:

String sq_str="SELECT * FROM stud where age> ?"; //Строка запроса на //выборку с параметром В этом запросе место параметра отмечено знаком вопроса. Установка значения параметра реализуется следующим образом:

prst.setInt (1,23);

Параметрами метода setInt являются: номер вставляемого параметра (в нашем примере — 1) и значение вставляемого параметра (23) для поля age. Текстовые значения вставляются с помощью метода setString.

Обратимся к вызову хранимых процедур.

В отличие от запросов с параметрами здесь используют класс CallableStatement. Таким образом, запрос на вызов хранимой процедуры может иметь такой вид:

CallableStatement cs = db. prepareStatement («call proc1(?,?)»);

cs.setSting (1,"hello");

cs.setInt (2,10);

В создаваемом запросе указывается имя вызываемой процедуры proc1 и обозначаются позиции для параметров знаком ?. Установка значений параметров производится уже знакомым нам образом. Теперь для иллюстрации приведем код приложения, которое соединяется с сервером SQL Server 2000 и вызывает хранимую процедуру на сервере. Эта процедура имеет следующий вид.

CREATE PROCEDURE [dbo]. proc1

@s varchar (16) OUTPUT

AS

Begin

SELECT @s="Hello From SQL Server"

END

RETURN 0

GO

В этой процедуре имеется выходной параметр типа varchar. В теле процедуры он получает значение текстовой строки «Hello From SQL Server». Таким образом, наша задача состоит в том, чтобы правильно соединиться с сервером SQL Server, создать в приложении вызов процедуры на сервере и установить выходной параметр. Этот параметр мы должны будем прочитать. Приведем текст готового приложения и дадим к нему пояснения.

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 proc1(?)}»);

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

cst.execute ();

String str=cst.getString (1);

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

System.out.println («OK»);

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

}

catch (Exception er)

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

}

}

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

CallableStatement cst= db. prepareCall («{call proc1(?)}»);

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

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

Первый операнд данной команды определяет номер параметра (нумерация начинается с 1). Второй операнд соответствует типу параметра (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с.

Показать весь текст
Заполнить форму текущей работой