РефератыИнформатика, программированиеРаРабота с базами данных в JAVA на основе соединения JDBC

Работа с базами данных в 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.r

egisterOutParameter(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с.

Сохранить в соц. сетях:
Обсуждение:
comments powered by Disqus

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

Слов:1512
Символов:14812
Размер:28.93 Кб.