Что такое jdbc какие классы интерфейсы относятся к jdbc
Руководство по JDBC. Введение.
Что такое JDBC?
Java Database Connectivity – это стандартный API для независимого соединения языка программирования Java с различными базами данных (далее – БД).
JDBC решает следующие задачи:
Если говорить в целом, то JDBC – это библиотека, которая обеспечивает целый набор интерфейсов для доступа к различным БД.
Для доступа к каждой конкретной БД необходим специальный JDBC – драйвер, который является адаптером Java – приложения к БД.
Строение JDBC
JDBC поддерживает как 2-звенную, так и 3-звенную модель работы с БД, но в общем виде, JDBC состоит из двух слоёв.
JDBC API использует менеджер драйверов и специальные драйверы БД для обеспечения подключения к различным базам данных.
JBDC Manager проверяет соответствие драйвера и конкретной БД. Он поддерживает возможность использования нескольких драйверов одновременно для одновременной работы с несколькими видами БД.
Схематично, JDBC можно представить в таком виде:
Рассмотрим элементы JDBC по отдельности.
Элементы JDBC
JDBC API состоит из следующих элементов:
Пакеты JDBC
Ключевыми пакетами JDBC являются java.sql и javax.sql. На момент написания этого руководства, текущей версией JDBC является JDBC 4.0.
С отличиями этой спецификации от предыдущих вы можете ознакомиться в JDBC Specification.
Вот основные изменения:
В этом уроке мы ознакомились с основами JDBC и рассмотрели его архитектуру.
В следующем уроке мы рассмотрим базовый синтаксис языка SQL.
Архитектура JDBC
Введение в архитектуру JDBC
Чтобы соединить Java-программу или приложение с базой данных, необходимо выполнить пять шагов:
1. Загрузить драйвер: драйвер помогает установить соединение с базой данных, поэтому драйвер должен быть загружен один раз в программу. Это можно сделать двумя способами:
2. Создание подключений: после загрузки драйвера соединение устанавливается. Объект соединения использует имя пользователя, пароль и URL для настройки соединения. URL имеет предопределенный формат, который содержит имя базы данных, используемый драйвер, IP-адрес, где хранится база данных, номер порта и поставщика услуг. Соединение может быть установлено с помощью команды:
Connection con = DriverManager.getConnection(URL, user, password);
3. Создание оператора. После установления соединения пользователь может взаимодействовать с базой данных. Интерфейсы, такие как оператор JDBC, PreparedStatement, CallableStatement, предоставляют методы, которые позволяют пользователю отправлять операторы SQL и получать данные из базы данных. Команда, используемая для создания оператора:
Statement stmt = con.createStatement();
4. Выполнение запроса: SQL-запрос выполняется для взаимодействия с базой данных. Запрос может быть для обновления / вставки в базу данных или для получения данных. Интерфейс оператора предоставляет два метода, т.е. метод executeQuery () для выполнения запросов для извлечения данных, а метод executeUpdate () для выполнения запросов на обновление или вставку. Например:
int n = stmt.executeUpdate(“DELETE TABLENAME”);
if(n==1)
System.out.println(“Success”);
else
System.out.println(“Failed”);
5. Закрытие соединения. После выполнения нашего запроса данные, которые пользователь хотел обновить или восстановить, были выполнены, поэтому пришло время закрыть установленное соединение. Интерфейс соединения предоставляет метод close () для закрытия соединения. Например:
Архитектура JDBC
JDBC поддерживает два типа моделей обработки для доступа к базе данных, т.е. двухуровневый и трехуровневый.
1. Двухуровневая архитектура:
Эта архитектура помогает Java-программе или приложению напрямую взаимодействовать с базой данных. Для связи с конкретной базой данных требуется драйвер JDBC. Запрос или запрос отправляется пользователем в базу данных, а результаты возвращаются пользователем. База данных может присутствовать на том же компьютере или на любом удаленном компьютере, подключенном через сеть. Этот подход называется клиент-серверной архитектурой или конфигурацией.
2. Трехуровневая архитектура:
В этом нет прямого общения. Запросы отправляются на средний уровень, т. Е. Браузер HTML отправляет запрос в Java-приложение, которое затем отправляется в базу данных. База данных обрабатывает запрос и отправляет результат обратно на средний уровень, который затем связывается с пользователем. Это повышает производительность и упрощает развертывание приложений.
Компоненты архитектуры JDBC
Базовая архитектурная схема JDBC показана ниже с расположением всех компонентов:
Интерфейсы
Пакет java.sql состоит из множества интерфейсов. Некоторые популярные интерфейсы упомянуты ниже:
Типы драйверов JDBC
Существует четыре типа драйверов JDBC:
1. Драйвер типа 1 или мост JDBC-ODBC: этот драйвер действует как мост между JDBC и ODBC. Он преобразует вызовы JDBC в вызовы ODBC, а затем отправляет запрос драйверу ODBC. Он прост в использовании, но время выполнения медленное.
2. Драйвер типа 2 или собственный API. Частично драйвер Java: этот драйвер использует вызов JNI (собственный интерфейс Java) для специфического API базы данных для конкретного клиента. Он сравнительно быстрее, чем драйвер типа 1, но требует встроенной библиотеки, и стоимость приложения также увеличивается.
3. Драйвер типа 3 или драйвер сетевого протокола. Эти драйверы обмениваются данными с сервером промежуточного программного обеспечения JDBC, используя собственный сетевой протокол. Это промежуточное ПО преобразует сетевой протокол в вызовы, специфичные для базы данных. Они независимы от базы данных. Они могут переключаться с одной базы данных на другую, но работают медленно из-за множества сетевых вызовов.
4. Тип-4 или тонкий драйвер. Этот драйвер также называется чистым драйвером Java, поскольку он напрямую взаимодействует с базой данных. Он не требует ни собственной библиотеки, ни сервера промежуточного программного обеспечения. Он имеет лучшую производительность, чем другие драйверы, но сравнительно медленно из-за увеличения количества сетевых вызовов.
Вывод
В этой статье описывается архитектура JDBC, ее интерфейсы и типы драйверов для связи или взаимодействия с базой данных.
Теперь дневные базы данных поддерживаются в каждом секторе, поэтому их обновление и получение данных из них необходимо. Таким образом, понимание архитектуры поможет понять основные концепции JDBC.
Рекомендуемые статьи
JDBC — Введение
JDBC расшифровывается как J ava D ata base Cnectivity, который является стандартным Java API для независимой от базы данных связи между языком программирования Java и широким спектром баз данных.
Библиотека JDBC включает API для каждой из задач, упомянутых ниже, которые обычно связаны с использованием базы данных.
Создание подключения к базе данных.
Создание операторов SQL или MySQL.
Выполнение запросов SQL или MySQL в базе данных.
Просмотр и изменение полученных записей.
Создание подключения к базе данных.
Создание операторов SQL или MySQL.
Выполнение запросов SQL или MySQL в базе данных.
Просмотр и изменение полученных записей.
По сути, JDBC — это спецификация, которая предоставляет полный набор интерфейсов, которые обеспечивают портативный доступ к базовой базе данных. Java может использоваться для написания различных типов исполняемых файлов, таких как —
Java ServerPages (JSP)
Enterprise JavaBeans (EJB).
Java ServerPages (JSP)
Enterprise JavaBeans (EJB).
Все эти различные исполняемые файлы могут использовать драйвер JDBC для доступа к базе данных и использовать преимущества сохраненных данных.
JDBC предоставляет те же возможности, что и ODBC, позволяя программам на Java содержать независимый от базы данных код.
Предварительно
Прежде чем двигаться дальше, вам необходимо хорошо понять следующие две темы:
Архитектура JDBC
JDBC API поддерживает как двухуровневые, так и трехуровневые модели обработки для доступа к базе данных, но в целом архитектура JDBC состоит из двух уровней:
JDBC API: обеспечивает соединение между приложением и диспетчером JDBC.
API драйвера JDBC: это поддерживает соединение диспетчера JDBC с драйвером.
JDBC API: обеспечивает соединение между приложением и диспетчером JDBC.
API драйвера JDBC: это поддерживает соединение диспетчера JDBC с драйвером.
JDBC API использует диспетчер драйверов и драйверы для конкретных баз данных, чтобы обеспечить прозрачное подключение к разнородным базам данных.
Диспетчер драйверов JDBC гарантирует, что для доступа к каждому источнику данных используется правильный драйвер. Диспетчер драйверов способен поддерживать несколько одновременных драйверов, подключенных к нескольким разнородным базам данных.
Ниже приведена архитектурная схема, на которой показано расположение диспетчера драйверов относительно драйверов JDBC и приложения Java.
Общие компоненты JDBC
JDBC API предоставляет следующие интерфейсы и классы —
DriverManager: этот класс управляет списком драйверов базы данных. Сопоставляет запросы на подключение из приложения Java с соответствующим драйвером базы данных, используя субпротокольный протокол Первый драйвер, который распознает некоторый подпротокол в JDBC, будет использоваться для установления соединения с базой данных.
Драйвер: этот интерфейс обрабатывает связь с сервером базы данных. Вы будете взаимодействовать напрямую с объектами Driver очень редко. Вместо этого вы используете объекты DriverManager, которые управляют объектами этого типа. Он также раскрывает подробности, связанные с работой с объектами Driver.
Соединение: Этот интерфейс со всеми методами для связи с базой данных. Объект соединения представляет контекст связи, т. Е. Вся связь с базой данных происходит только через объект соединения.
Оператор: объекты, созданные из этого интерфейса, используются для отправки операторов SQL в базу данных. Некоторые производные интерфейсы принимают параметры в дополнение к выполнению хранимых процедур.
ResultSet: эти объекты содержат данные, извлеченные из базы данных после выполнения запроса SQL с использованием объектов Statement. Он действует как итератор, чтобы позволить вам перемещаться по его данным.
SQLException: этот класс обрабатывает любые ошибки, которые происходят в приложении базы данных.
DriverManager: этот класс управляет списком драйверов базы данных. Сопоставляет запросы на подключение из приложения Java с соответствующим драйвером базы данных, используя субпротокольный протокол Первый драйвер, который распознает некоторый подпротокол в JDBC, будет использоваться для установления соединения с базой данных.
Драйвер: этот интерфейс обрабатывает связь с сервером базы данных. Вы будете взаимодействовать напрямую с объектами Driver очень редко. Вместо этого вы используете объекты DriverManager, которые управляют объектами этого типа. Он также раскрывает подробности, связанные с работой с объектами Driver.
Соединение: Этот интерфейс со всеми методами для связи с базой данных. Объект соединения представляет контекст связи, т. Е. Вся связь с базой данных происходит только через объект соединения.
Оператор: объекты, созданные из этого интерфейса, используются для отправки операторов SQL в базу данных. Некоторые производные интерфейсы принимают параметры в дополнение к выполнению хранимых процедур.
ResultSet: эти объекты содержат данные, извлеченные из базы данных после выполнения запроса SQL с использованием объектов Statement. Он действует как итератор, чтобы позволить вам перемещаться по его данным.
SQLException: этот класс обрабатывает любые ошибки, которые происходят в приложении базы данных.
Пакеты JDBC 4.0
Java.sql и javax.sql являются основными пакетами для JDBC 4.0. Это последняя версия JDBC на момент написания данного руководства. Он предлагает основные классы для взаимодействия с вашими источниками данных.
Новые функции в этих пакетах включают изменения в следующих областях:
Автоматическая загрузка драйвера базы данных.
Улучшения обработки исключений.
Расширенная функциональность BLOB / CLOB.
Улучшения интерфейса подключения и оператора.
Обзор спецификации JDBC
Мы попытаемся разобраться с основными понятиями JDBC, последовательно разбирая содержание спецификации. Надеюсь, что этот материал окажется не просто введением или обзором JDBC, но и чем-то вроде навигатора по спецификации. Для этого в качестве разделов основной части статьи использовались названия глав спецификации с приведением их оригинальных названий.
Спецификация
1. Введение (Introduction)
JDBC, также как и Microsoft ODBC и Borland DataBase Engine (BDE), базируется на X/Open SQL CLI (Call Level Interface). Авторы спецификации обращают особое внимание на то, что их основная задача состоит в описании основных абстракций и концепций, определенных в X/Open CLI, в виде натуральных («родных») интерфейсов Java.
Для того чтобы лучше понять суть подхода, используемого в JDBC, напомню, что представляют из себя интерфейсы Java. В отличие от классов, заключающих в себе как объявление, так и реализацию методов, интерфейсы обеспечивают более высокий уровень абстракции, описывая только объявления методов. Учитывая возможность наследования, причем наследования множественного (в отличие от классов), такой подход позволяет создавать программы, предназначенные для работы с базами данных, не зависящие от конкретной реализации как самой СУБД, так и методов доступа к ней. Для того чтобы обратиться к конкретной СУБД (подразумеваются серверы баз данных), будь это Oracle, Informix, InterBase или что-то другое, разработчику необходим JDBC-драйвер. В концепции универсиализации доступа к данным через стандартные интерфейсы (мы их рассмотрим ниже в этой статье) JDBC-драйвер есть совокупность классов, реализующих JDBC-интерфейсы. Под реализацией интерфейса в Java понимается создание класса, ссылающегося в своем объявлении на интерфейс и предлагающего конкретную реализацию методов интерфейса уже в виде методов данного класса.
2. Цели и философия (Goals and phylosophy)
Этот раздел спецификации определяет приоритеты, заложенные в основу взаимодействия Java-программ и баз данных.
3. Обзор основных интерфейсов (Overview of the major interfaces)
Данный раздел дает краткое описание базовых интерфейсов (3.1 The JDBC API) и интерфейса драйвера (3.2 The JDBC Driver Interface).
Первая часть этого раздела выделяет как наиболее важные следующие интерфейсы (общая схема их взаимодействия представлена на рис. 1):
Рисунок 1.
Основные интерфейсы JDBC.
Наконец, приведем простейший пример установки соединения и получения данных из БД:
Рисунок 2.
Уровни реализации JDBC API.
Конечно, в реальной системе нам необходимо обработать возможные исключительные ситуации, которые могут возникнуть при неправильном вводе пароля, указании несуществующей таблицы в SQL-запросе и т.п. Однако, построение полнофункционального приложения не есть цель данной статьи, оставим ее авторам книг по Java и JDBC.
4. Сценарии использования (Scenarios of using)
В этом случае сценарий взаимодействия такого апплета с БД будет напоминать следующий (см. рис. 3).
В зависимости от конкретной архитектуры реализации драйвера клиентская часть сервера баз данных может присутствовать на клиенте или только на web-сервере (или другом сервере, доступном в сети). В первом случае JDBC-драйвер обычно реализуется как набор Java-классов, описывающих интерфейсы java.sql.* через native-вызовы (платформно-зависимый код). Во втором случае JDBC-драйвер обычно называют JDBC-Net. Он написан целиком на Java и обращается к серверу баз данных по TCP/IP, формируя дейтаграммы в формате, понятном серверу.
Понятно, что типичные апплеты отличаются от традиционных приложений баз данных целым рядом особенностей:
Архитектура Java позволяет также создавать и самостоятельные приложения (4.2). Конечно, они, как и апплеты, выполняются виртуальной машиной, но в отличие от последних существуют вне контекста web-документов. В этом случае сценарий отличает от описанного выше отсутствие пункта 1, а ограничения на доступ к локальным ресурсам снимается до уровня обращения к ним через виртуальную машину (см. рис. 3).
Рисунок 3.
Взаимодействие приложения с БД.
Кроме двух основных сценариев, описанных выше, этот раздел содержит и упоминание «безопасных» (trusted) апплетов и трехзвенной модели (4.3 Other scenarios). Безопасные апплеты включают криптографический ключ и могут, как и приложения, обращаться к локальным ресурсам через виртуальную машину. Случай трех-уровневой архитектуры подразумевает вызов из апплетов или приложений не сервера баз данных напрямую, а сервера приложений/бизнес-логики, который уже, в свою очередь, осуществляет взаимодействие с сервером БД.
На рис. 4 представлена диаграмма взаимодействия Java-кода и баз данных в трехуровневой (точнее, многоуровневой N-tier) модели. Как вы видите, в качестве основных способов взаимодействия между Java-приложениями (апплетами) и серверами среднего звена используются RPC (вызовы удаленных процедур) и CORBA. В случае CORBA, вообще говоря, кроме звена бизнес-логики присутствует и ORB (брокер объектных запросов или, как стало принято называть у нас в литературе, брокер объектных заявок). Что касается самих серверов приложений, то Java (в частности, JDBC) никаких специальных требований к ним не предъявляет, как и в случае с серверами баз данных.
Рисунок 4.
Трехуровневая модель.
5. Соображения безопасности (Security considerations)
Название раздела говорит само за себя. Основной упор в защите доступа к базам данных делается на использование менеджера безопасности Java, реализуемого исполняющей системой (виртуальной Java-машиной).
В отношении апплетов спецификация JDBC (5.1 JDBC and untrusted applets) формулирует следующие основные положения.
В отношении Java-приложений (5.2 JDBC and Java applications) JDBC не накладывает никаких специальных ограничений, загружая драйверы из локального пути имен. Однако, если класс sql.Driver загружается из удаленного источника, этот драйвер может быть использован только тем загружаемым кодом, который имеет один и тот же источник с этим классом.
В качестве шаблона прикладного кода проверки доступ на уровне сетевого взаимодействия (5.3 network security), еще до открытия сессии взаимодействия с базой данных, предлагается следующее:
Далее начинают работать механизмы аутентификации, поддерживаемые той или иной сетевой операционной системой, сервером приложений и сервером баз данных.
Во всех этих случаях базовой конструкцией проверки безопасности является уже знакомый код, выглядящий, в общем случае, следующим образом:
6. Организация соединения с базой данных (Database connections)
Этот раздел освещает основные вопросы, связанные с подсоединением к базе данных.
Для доступа к базе данных необходимо получить объект java.sql.Connection. Сделать это можно, обратившись к уровню управления JDBC посредством вызова java.sql.DriverManager.getConnection. Основным параметром этого вызова является строка URL (Uniform Resource Locator), описывающая такие характеристики соединения, как субпротокол (например, ODBC) и имя базы данных (может быть комплексным, описывая сервер, путь и файл БД). После получения объекта соединения можно начать работу непосредственно с базой данных, обращаясь к методам java.sql.Connection для создания объектов java.sql.Statement, java.sql.PreparedStatement и java.sql.CallableStatement.
Механизм именования баз данных в JDBC, базируясь на URL, решает такие вопросы, как автоматический выбор драйвера, способного осуществить доступ к данной БД, определение характеристик соединения и т.п.
В общем случае спецификация рекомендует следующую конструкцию URL:
В качестве атрибутов могут выступать такие характеристики, как размер кэша (CacheSize), имя пользователя (UID), пароль (PWD) и т.п.
JDBC предусматривает и возможность динамического подсоединения к базе данных. В этом случае вы можете произвести такие операции, как явная загрузка драйвера
Class.forName(«acme.db.Driver»);, его регистрация через вызов DriverManager.registerDriver и т. п.
В случае с ODBC можно привести следующий пример динамического соединения:
7. Передача параметров и получение результатов (Passing parameters and receiving results)
Еще раз приведем пример получения данных из БД:
В данном случае использовалось обращение к столбцам таблицы по их именам. Причем регистр имени столбца не играет роли (case insensitive).
JDBC предусматривает и доступ по номеру столбца:
При этом столбцы нумеруются начиная с 1, а не с нуля.
Очевидно, что при описанных подходах в работе с результирующим множеством строк особое значение приобретает исчерпывающее описание методов ResultSet.getXxxx. Действительно, информация в базе данных часто хранится не только в виде столбцов простейших типов (целое, длинное целое и т. п.), но и в специфических двоичных форматах. Таблица 1 описывает возможность получения данных того или иного типа с помощью соответствующих методов getXxxx (особо выделены те ячейки отображения «метод-тип», использование которых рекомендовано стандартом).
T | S | I | B | R | F | D | D | N | B | C | V | L | B | V | L | D | T | T | |
Y | M | N | I | E | L | O | E | U | I | H | A | O | I | A | O | A | I | I | |
I | A | T | G | A | O | U | C | M | T | A | R | N | N | R | N | T | M | M | |
N | L | E | I | L | A | B | I | E | R | C | G | A | B | G | E | E | E | ||
Y | L | G | N | T | L | M | R | H | V | R | I | V | S | ||||||
I | I | E | T | E | A | I | A | A | Y | N | A | T | |||||||
N | N | R | L | C | R | R | A | R | A | ||||||||||
T | T | C | R | B | M | ||||||||||||||
H | Y | I | P | ||||||||||||||||
A | N | ||||||||||||||||||
Y | |||||||||||||||||||
getByte | X | x | x | x | x | x | x | x | x | x | x | x | x | ||||||
getShort | x | X | x | x | x | x | x | x | x | x | x | x | x | ||||||
getInt | x | x | X | x | x | x | x | x | x | x | x | x | x | ||||||
getLong | x | x | x | X | x | x | x | x | x | x | x | x | x | ||||||
getFloat | x | x | x | x | X | x | x | x | x | x | x | x | x | ||||||
getDouble | x | x | x | x | x | X | X | x | x | x | x | x | |||||||
getNumcric | x | x | x | x | x | x | x | X | X | x | x | x | x | ||||||
getBoolean | x | x | x | x | x | x | x | x | x | X | x | x | x | ||||||
getString | x | x | x | x | x | x | x | x | x | x | X | X | x | x | x | x | x | x | x |
getBytes | X | X | x | ||||||||||||||||
getDate | x | x | x | X | x | ||||||||||||||
getTime | x | x | x | X | x | ||||||||||||||
getTimestamp | x | x | x | x | X | ||||||||||||||
getAsciiSteam | x | x | X | x | x | x | |||||||||||||
getUnicodeStream | x | x | X | x | x | x | |||||||||||||
getBinaryStream | x | x | X | x | x | x | |||||||||||||
getObject | x | x | x | x | x | x | x | x | x | x | x | x | x | x | x | x | x | x | x |
Таблица 1.
Использование методов ResultSet.getXxxx для основных типов SQL.
В рассматриваемом разделе спецификации JDBC определяется и обработка значения SQL «NULL». Для его идентификации можно использовать метод ResultSet.wasNull. В случае чтения «пустых» данных с использованием методов ResultSet.getXxxx вы получите:
Говоря о передаче параметров, мы подразумеваем параметры IN (передаваемые) и OUT (возвращаемые).
В обоих случаях требуется установить взаимное соответствие типов Java и SQL. Отображению типов посвящен раздел 8 спецификации. В данном же контексте для нас важнее методы работы с параметрами объектов, описывающих интерфейсы PreparedStatement и CallableStatement.
При работе с параметрами, также как и при чтении, возможна работа с «большими» данными. Для этого используются такие методы, как setBinaryStream и т. п.
Конечно, мы смогли остановиться лишь на основных моментах, связанных с получением результатов и передачей параметров. Более полную информацию вы сможете найти в самой спецификации.
8. Отображение типов данных SQL в Java (Mapping SQL data types into Java)
SQL type | Java Type |
CHAR | String |
VARCHAR | String |
LONGVARCHAR | String |
NUMERIC | java.sql.Numeric |
DECIMAL | java.sql.Numeric |
BIT | boolean |
TINYNT | 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 |
Таблица 2.
Отображение типов SQL в Java.
9. Асинхронные запросы, потоки и транзакции (Asynchrony, Threading, and Transactions)
Новое подключение к базе данных изначально стартует в режиме auto-commit. Это значит, что каждое выражение выполняется в отдельной транзакции. При необходимости можно отменить этот режим, вызвав метод Connection.setAutoCommit с параметром false. После этого необходимо в явном виде указывать операции завершения/отката транзакции посредством вызовов Connection.commit / Connection.rollback. Для определения и контроля уровней изолированности транзакций (набор которых может отличаться для разных серверов баз данных) предлагается использовать методы java.sql.DatabaseMetaData и java.sql.Connection.
10. Курсоры (Cursors)
JDBC предоставляет простейшую поддержку курсоров. Приложения могут использовать ResultSet.getCursorName() для получения курсора, ассоциированного с данным набором строк. После этого с помощью курсора можно выполнять выборочные (с позиционированием) обновления и удаления строк. Однако не все серверы БД поддерживают эти механизмы, поэтому перед их вызовом необходимо удостовериться в такой поддержке с помощью методов DatabaseMetaData.supportPositionedUpdate и DatabaseMetaData.supportPositionedDelete.
11, 12. Расширения SQL (11 SQL Extensions, 12 Variants and Extensions)
Ряд серверов баз данных поддерживают расширения SQL, выходящие за рамки входного уровня стандарта SQL-2. Данный раздел спецификации описывает следующие положения, необходимые для получения драйвером логотипа JDBC-CompliantTM:
Расширения также включают поддержку литералов, специфицирующих величины даты и времени, скалярные функции (в соответствии с семантикой, определенной X/Open CLI и ODBC), escape-последовательности для оператора LIKE и синтаксис outer join.
Раздел 12 включает дополнительные соображения, касающиеся специфики конкретных сервров, по сути, разъясняя достаточно «нейтральную» позицию спецификации, в отношении дополнительной поддержки драйверами особенностей серверов по определению и работе с метаданными. Основным моментом здесь является предоставление всей необходимой информации о расширениях через реализацию интерфейса java.sql.DatabaseMetaData (информация о метаданных).
13. Определение интерфейсов JDBC (JDBC Interface Definitions)
Спецификация не включает полного описания JDBC API, адресуя разработчиков к документации по пакету java.sql. Однако в данном разделе дается диаграмма связей между ними (рис. 6) перечисляются все базовые интерфейсы JDBC:
Интерфейсы ядра JDBC:
14. Динамический доступ к базам данных (Dynamic Database Access)
Авторами спецификации отмечается, что, хотя в большинстве случаев разработчики заранее знают схему базы данных (метаданные), существует ряд задач, когда анализ БД происходит «на лету». Именно для такого анализа и предназначены указанные в предыдущем разделе интерфейсы метаданных. Эти интерфейсы могут использоваться в сочетании с интерфейсами ядра JDBC без каких либо конфликтов со стороны менеджера драйверов или самих драйверов. В продолжение раздела 8 определяется соответствие SQL-типов объектам Java для использования методов getObject и setObject для ввода/вывода данных. В качестве примера использования этих методов можно привести следующий вариант уже знакомой последовательности вызовов на чтение данных:
Рисунок 6.
Важнейшие связи между интерфейсами JDBC.
Приложения
Спецификация JDBC включает четыре приложения.
Приложение B представляет собой набор примеров использования JDBC (использование SELECT и UPDATE).
В Приложении C даются краткие замечания по реализации JDBC на примере работы с результирующим набором строк через интерфейс ResultSetMetaData.
Приложение D содержит список последних изменений и дополнений стандарта JDBC.
В заключение, я еще раз попросил бы читателей обратить внимание непосредственно на саму спецификацию JDBC, так как ни одна статья, популяризирующая тот или иной подход (или архитектуру), не заменит документ, подготовленный авторами этого подхода.
Наиболее полную информацию (спецификации, слайд-шоу, примеры, статьи и т.п.) по JDBC и другим технологиям Java читатель может получить на Web-сервере.
Поделитесь материалом с коллегами и друзьями