Реферат

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

Работа добавлена на сайт bukvasha.net: 2014-08-15

Поможем написать учебную работу

Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.

Предоплата всего

от 25%

Подписываем

договор

Выберите тип работы:

Скидка 25% при заказе до 21.9.2024


БЕЛОРУССКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ ИНФОРМАТИКИ И РАДИОЭЛЕКТРОНИКИ
кафедра информационных технологий и автоматизированных систем
РЕФЕРАТ
на тему:
«Работа с базами данных в JAVA на основе соединения JDBC»
Минск, 2008

Как мы знаем, SQL-запросы предварительно компилируются по месту исполнения. Следовательно, чтобы ускорить их выполнение следует компиляцию запросов выполнять предварительно. Это реализуется командой divpareStatement класса PreparedStatement. Данная команда позволяется использовать SQL-запросы с параметрами. Параметры вставляются в запросы как знак вопроса. Сначала рассмотрим, как использовать инструкцию divpareStatement на следующем примере:
    try{
      Connection db=DriverManager.getConnection(url);
      String   sq_str="SELECT * FROM stud";  //Строка запроса на выборку
       PreparedStatement prst= db.divpareStatement(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.divpareStatement(sq_str);
Скомпилированный заапрос выполняется обычным образом:
       ResultSet rs= prst.executeQuery()
Теперь предположим, что мы хотим выполнить выборку студентов, чей возраст превосходит 19 лет. В этой связи нам надлежит ввести в запрос параметр. Делается это таким образом:
  try{
      Connection db=DriverManager.getConnection(url);
      String   sq_str="SELECT * FROM stud where age> ?";  //Строка запроса на //выборку  с параметром
       PreparedStatement prst= db.divpareStatement(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.divpareStatement(“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.divpareCall("{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.divpareCall("{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.divpareCall("{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с.

1. Диплом на тему Особенности протекания подросткового кризиса в современном обществе
2. Доклад на тему Гангрена газовая
3. Контрольная_работа на тему Создание тематического web-сайта с использованием методов CSS и языка Java Script
4. Реферат Анализ компонентов системы передачи Е1
5. Лекция на тему Политическая власть
6. Реферат Забота государства о престарелых людях
7. Реферат на тему Русская голубая кошка
8. Доклад на тему Управление транспортом в экономически развитых странах мира
9. Курсовая на тему Совершенствование бухгалтерского учета товарных операций на примере ООО БРВ Краснодар
10. Задача Поведение покупателей и принятие решения о закупке