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