Пример 18.2. Выполнение динамического SQL-запроса к учебной базе данных из Java-программы.
Создание оператора: класс PreparedStatement
В случае использования этого объекта программа подготавливает SQL-оператор при помощи метода prepareStatement (String sql) объекта Connection: берется SQL-строка и передается СУБД. Строка проходит через стадии синтаксического анализа, оптимизации и генерирования плана выполнения, но не выполняет оператор SQL. Ссылка на план выполнения возвращается JDBC, который сохраняет ее в объекте PreparedStatement.
Одно из важных свойств метода prepareStatement - возможность обработки входных параметров. Они помечаются в операторе SQL символом "?" на месте фактического значения. В программе Java проводится соответствие между параметрами и методами setXXXX() - setInt, setFloat, setString и т.д., в соответствии с типами входныхпараметров. Все методы setXXXX() принимают в качестве параметров значение параметра и указатель parameterIndex, который равен 1 для первого "?", 2 - для второго и т.д. Выполнение sql-оператора обеспечивается методами объекта PreparedStatement:
executeQuery() - для выполнения запроса выборки SELECT ;
execute() - для выполнения запроса, возвращающего множественные наборы данных ;
executeUpdate() - для выполнения запроса модификации данных INSERT, UPDATE или DELETE.
Объект PreparedStatement обеспечивает более быстрое выполнение оператора SQL и является примером реализации динамического SQL.
Class.forName(
"com.ms.jdbc.odbc.JdbcOdbcDriver");
Connection myCon=DriverManager.getConnection
("jdbc:odbc:mystud","user1","123");
PreparedStatement mySt=myCon.prepareStatement
("INSERT товар(название, тип, цена)
VALUES(?,?,?)");
mySt.setString(1, "Трюфели");
mySt.setString(2, "Конфеты");
mySt.setInt(3,156);
int res=mySt.executeUpdate();
Технология Active Data Objects (ADO) - это программное расширение технологии активных серверных страниц ASP, реализованное в Web-сервере Internet Information Server (IIS) компании Microsoft с целью организации подключений к базам данных. В технологии ADO поддерживаются следующие основные функции:
независимо создаваемые объекты;
поддержка хранимых процедур с входными, выходными и возвращаемыми параметрами ;
курсоры различных типов (включая возможность поддержки разных специальных курсоров конечных пользователей);
пакетное обновление;
поддержка ограничений для числа возвращаемых строк или других параметров запроса;
поддержка нескольких наборов данных, возвращаемых хранимыми процедурами или пакетными операторами.
Основными преимуществами технологии ADO является простота использования, высокая скорость, небольшие потребности в оперативной памяти и незначительные затраты дисковой памяти.
Объектная модель ADO определяет набор ( коллекцию ) программируемых объектов, которые могут применяться с Visual Basic, Visual C++, VBScript. Объектная модель ADOразработана для выполнения большинства особенностей интерфейса OLE DB.
Если при помощи интерфейса ODBC операционная система осуществляет, как правило, доступ к реляционным БД, использующим структурированный язык запросов SQL, то интерфейс OLE DB (Object Linking and Embedding for DataBases) является более универсальной технологией для доступа к любым источникам данных.
В интерфейс OLE DB включен механизм провайдеров, под которыми понимаются поставщики данных, находящиеся в надстройке над физическим форматом данных. Их называют сервис-провайдерами, они помогают объединять в однотипную совокупность объекты, связанные с разнообразными источниками данных.
Интерфейс OLE DB может использовать для доступа к источникам данных интерфейс ODBC. В этом случае применяется провайдер OLE DB для доступа к ODBC-данным. Таким образом, интерфейс OLE DB не заменяет интерфейс ODBC, а позволяет организовать доступ к источникам данных через различные интерфейсы, и в том числе через ODBC.
ADO содержит семь объектов, которые инкапсулируют в себе большинство операций с базой данных - Connection ( соединение ), Command ( команда ), Parameter ( параметр), Recordset ( набор данных ), Field (поле), Property (свойство) и Error (ошибка), - а также четыре набора объектов ( коллекции ) - Fields (поля), Properties (свойства),Parameters ( параметры ) и Errors (ошибки).
Объект Connection устанавливает коммуникационную связь между приложением и источником данных, позволяет выполнять команды. Класс Connection включает следующие методы:
Open ( Close ) - установление (закрытие) физического соединения с источником данных;
Execute - выполнение команды для этого соединения ;
BeginTrans, CommitTrans, RollbackTrans - управление транзакциями для текущего подключения, включая вложенные транзакции, если источник данных поддерживает работу с ними.
Объект Command. Команда, направляемая в базу данных, как правило, представляет собой SQL-команду или вызов некоторой хранимой процедуры. Объект Command может настраиваться с помощью параметров, задаваемых посредством создания коллекции объектов класса Parameter. Класс Command включает следующие методы:
Execute - выполнение команды для данного соединения ;
CreateParameter - создание нового объекта класса Parameter.
Коллекция Parameters. Содержит любые параметры, которые используются вместе с данным объектом Command. Класс Parameters содержит следующие методы:
Append ( Delete ) - добавление (удаление) параметра для указанной коллекции ;
Item - извлечение определенного объекта Parameter.
На некоторый объект Parameter в коллекции Parameters можно ссылаться, используя его порядковый номер или значение, присвоенное свойству Name этого объекта.
Объект Recordset представляет набор записей, полученный в результате выполнения запроса в базе данных. При создании объекта Recordset указатель текущей записи устанавливается на его первую запись (если таковая имеется), а свойствам BOF и EOF присваивается значение FALSE. Если никаких записей нет, то свойству Recordcountприсваивается значение 0, а свойствам BOF и EOF - значение TRUE. Класс Recordset включает следующие методы:
MoveFirst, MoveLast, MoveNext, MovePrevious и Move - производят перемещение указателя текущей записи в предположении, что провайдер поддерживает выполнение соответствующей функции. В однонаправленных объектах Recordset поддерживается только метод MoveNext. При использовании указанных методов для перемещения по записям результирующего набора для обнаружения его начала и конца могут применяться свойства BOF и EOF объекта Recordset ;
AddNew, Update, Delete - осуществляют добавление новых записей, обновление и удаление имеющихся записей, связанных с открытым объектом;
Open ( Close ) - выполняют открытие (закрытие) курсора, представляющего результаты выполнения команды.
Коллекция Fields. Объект Recordset содержит коллекцию Fields, состоящую из объектов класса Field, каждый из которых соответствует столбцу данных объектаRecordset. Как и при работе с объектами Parameter, на отдельный объект Field в коллекции Fields можно ссылаться, используя его порядковый номер или имя.