JDBC, создание SQL запросов, интерфейсы Statement, PreparedStatement




JDBC, драйверы строка соединения, класс DriverManager, интерфейс Connection.

Кроме классов с методами доступа к базам данных для каждой СУБД необходим драйвер JDBC — промежуточная программа, реализующая методы JDBC. Существуют четыре типа драйверов JDBC.

1. JDBC-ODBC "мост". Драйверы данного типа реализуют доступ к базе данных, используя механизм ODBC (Open Database Connectivity). При использовании такого драйвера будет необходимо установить на каждом рабочем месте клиентскую часть базы данных. В некоторых случаях потребуется еще и ODBC-драйвер. JDBC-ODBC "мост" наиболее приемлем для использования в корпоративных сетях, а также для реализации на Java серверной части приложения с так называемой "трехуровневой" архитектурой. (пример: JavaSoft)

2. Драйвер, написанный с использованием native-методов. Этот драйвер преобразует JDBC-вызовы в вызовы архитектурно-зависимой клиентской части Oracle, Sybase, Informix, DB2 и других баз данных. Это требует, как и в случае использования JDBC-ODBC "моста" установки на каждое клиентское место некоторого программного обеспечения. (IBM)

3. Драйвер клиент-серверной архитектуры с клиентской частью, реализованной на Java. Драйвер данного типа преобразует JDBC-вызовы к сетевому протоколу, независимому от базы данных, которые затем преобразуются сервером к протоколу конкретной базы данных. Сервер имеет возможность подключить своих Java клиентов к различным базам данных. Использование конкретного протокола зависит от производителя. Многие компании уже при создании своих программных продуктов учитывают возможность использования JDBC. (IDS Software)

4. Драйвер, реализованный на Java и использующий протокол конкретной базы данных. Данный драйвер реализует непосредственный доступ клиента к полям базы данных, что является наилучшим решением при использовании баз данных в корпоративной сети. Поскольку этот механизм зависит от реализации базы данных, компании-производители берутся сами за создание драйверов JDBC. (Imaginary)

Подключение Java-программы к реляционной СУБД с помощью JDBC выполняется в три этапа:

· Установка связи между Java-программой и диспетчером базы данных.

· Передача SQL-команды в базу данных с помощью объекта Statement.

· Чтение полученных результатов из базы данных и использование их в программе.

Работа с классом DriverManager

Для подключения к базе данных среда выполнения Java должна загрузить соответствующий драйвер указанной базы данных. Загрузка и выгрузка таких драйверов осуществляется с помощью класса DriverManager.

Стандартный способ получения соединения - это вызов метода DriverManager.getConnection. Этому методу передается строка, содержащая т.н. "URL". Класс DriverManager, представляющий собой уровень управления в JDBC, пытается найти драйвер, который может соединиться к БД с помощью данного URL. Класс DriverManager содержит список зарегистрированных классов Driver, и при вызове метода getConnection он проверяет каждый драйвер и ищет среди них тот, который "умеет" соединятся с БД, указанной в URL. Метод connect драйвера использует этот URL для установления соединения.

Перед обращением к базе данных следует установить нужный драйвер.

После того как драйвер установлен, надо связаться с базой данных. Методы связи описаны в интерфейсе connection. Экземпляр класса, реализующего этот интерфейс, можно получить одним из статических методов getConnection () класса DriverManager, например:

Class.forName("com.mysql.jdbc.Driver").newInstance();

String host = "jdbc:mysql://localhost:3306/";

String database = "vinogradovadz?useUnicode=true&characterEncoding=utf8";

String user = "root";

String password = "gfhjkm";

connection = DriverManager.getConnection(host+database,user,password);

JDBC-URL

JDBC-URL предоставляет способ указания БД и определенного драйвера, который устанавливает соединение с данной БД.

Стандартный синтаксис JDBC URL показан ниже. Он имеет три части, разделенных двоеточием:

jdbc:<subprotocol>:<subname>

JDBC URL состоит из:

jdbc - протокола. Протокол, используемый в JDBC URL - всегда jdbc.

<subprotocol> (подпротокола) - это имя драйвера или имя механизма соединения с БД. Подпротокол может поддерживаться одним или несколькими драйверами. Лежащий на поверхности пример подпротокола - это "odbc", отведенный для URL, обозначающих имя источника данных ODBC. Например, для доступа к БД через мост JDBC-ODBC нужно использовать URL такого вида:

jdbc:odbc:fred

В этом примере подпротокол задан как "odbc", а подимя "fred" является локальным источником данных.

<subname> (подимени) - это идентификатор БД. Значение подимени может менятся в зависимости от подпротокола, и может также иметь подподимя с синтаксисом, определяемым разработчиком драйвера. Назначение подимени - это предоставление всей информации, необходимой для поиска БД Например, если БД находится в Интернет, то в состав подимени JDBC-URL должен быть включен сетевой адрес, подчиняющийся следующим соглашениям:

//hostname:port/subsubname

Предполагая, что "dbnet" - это протокол соединения к хосту в Интернет, JDBC-URL может выглядеть так:

jdbc:dbnet://wombat:356/fred


 

JDBC, создание SQL запросов, интерфейсы Statement, PreparedStatement

Класс Statement.

Объект Statement используется для выполнения SQL-запросов к БД. Существует три типа объектов Statement. Все три служат как бы конейнерами для выполнения SQL-выражений через данное соединение: Statement, PreparedStatement, наследующий от Statement, и CallableStatement, наследующий от PreparedStatement. Они специализируются на различных типах запросов: Statement используется для выполненияпростых SQL-запросов без параметров; PreparedStatement используется для выполнения прекомпилированных SQL-запросов с или без входных (IN) параметров; CallableStatement используется для вызовов хранимых процедур.

Создание объектов Statement

Как только соединение с определенной БД установлено, оно может использоваться для выполнения SQL-запросов. Объект Statement создается методом Connection.createStatement, как показано ниже:

Statement stmt = con.createStatement();

Посылаемое в БД SQL-выражение передается в качестве аргумента одному из методов объекта Statement для выполнения SQL-запроса:

ResultSet rs = stmt.executeQuery("SELECT a, b, c FROM Table");

Выполнение запроса через объект Statement

Интерфейс Statement предоставляет три различных метода выполнения SQL-выражений: executeQuery, executeUpdate и execute, в зависимости от SQL-запроса.

Метод executeQuery необходим для запросов, результатом которых является один единственный набор значений, таких как запросов SELECT.

Метод executeUpdate используется для выполнения операторов INSERT, UPDATE или DELETE, а также для операторов DDL (Data Definition Language - язык определения данных), например, CREATE TABLE и DROP TABLE. Метод executeUpdate возвращает целое число, показывающее, сколько строк было модифицировано. Для выражений типа CREATE TABLE и DROP TABLE, которые не оперируют над строками, возвращаемое методом executeUpdate значение всегда равно нулю.

Метод execute используется, когда операторы SQL возвращают более одного набора данных, более одного счетчика обновлений или и то, и другое.

Все методы выполнения SQL-запросов закрывают предыдущий набор результатов (result set) у данного объекта Statement. Это означает, что перед тем как выполнять следующий запрос над тем же объектом Statement, надо завершить обработку результатов предыдущего (ResultSet).

класс 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.

PreparedStatement mySt=myCon.prepareStatement

("SELECT * FROM Users WHERE name =? AND psw=?");

mySt.setString(1, "nam");

mySt.setString(2, "123");

int res=mySt.executeUpdate();

Закрытие объектов Statement

Объекты Statement закрываются автоматически с помощью сборщика мусора виртуальной машины Java. Тем не менее рекомендуется закрывать их явно после того, как в них отпадает необходимость.


 



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2016-02-16 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: