что такое jdbc java
Национальная библиотека им. Н. Э. Баумана
Bauman National Library
Персональные инструменты
JDBC (Java DataBase Connectivity)
Разработчики: | Oracle Corporation |
---|---|
Выпущена: | 5 December 2013 года ; 7 years ago ( 2013-12-05 ) |
Постоянный выпуск: | JDBC 4.2 |
Тип ПО: | Data Access API |
Веб-сайт | JDBC |
Содержание
Архитектура
Рисунок 1 – Архитектура Java Applet/Application
Рисунок 2 – Архитектура Java Application
Левая сторона. Тип 1: Java драйвер для прямого подключения к БД
Этот тип драйвера преобразует запросы JDBC в сетевой протокол, используемый непосредственно СУБД, позволяющая осуществлять прямой запрос с компьютера клиента на сервер СУБД и предоставляющая практическое решение для доступа в интрасеть.
Правая сторона. Тип 2: Java драйвер для промежуточного БД
Данный тип переводит запросы JDBC в протокол поставщика промежуточного ПО, который далее преобразуется в протокол СУБД сервером промежуточного ПО. Промежуточное ПО обеспечивает подключение ко многим различным БД.
На рисунке 2 показано подключение JDBC с использованием драйверов ODBC и существующих клиентских библиотек БД.
Левая сторона. Тип 3: JDBC-ODBC мост с драйверами ODBC
Эта комбинация обеспечивает доступ JDBC через драйвера ODBC. Бинарный код ODBC должен быть загружен на каждом компьютере клиента, который использует мост JDBC-ODBC.
Правая сторона. Тип 4: Встроенный API драйвер с частичной технологией Java
Этот тип драйвера преобразует запросы JDBC в запросы клиентского API для Oracle, Sybase, Informix, DB2 или других СУБД.
Преимущества и недостатки
Преимуществами JDBC считают:
Недостатками JDBC являются:
Сравнение JDBC и ODBC
JDBC | ODBC | |
---|---|---|
Архитектура | Базовая архитектура поддерживает как двухуровненвые, так и трехуровневые модели обработки БД, но в основном состоит из двух уровней архитектуры: JDBC API и JDBC Driver API | Архитектура ODBC в основном состоит из 4 компонентов: драйвер, диспетчер драйверов, API и источник данных |
Сложность | В случае с JDBC кодирование является начальным этапом комплексного программирования запросов | Обрабатывает различные сложные ситуации и запросы для получения правильных выходных данных машинного уровня. Так что это продвинутая версия кодирования и других разных подходов. |
Язык программирования | Java | C, C++, Java и т.д. |
Платформа | Выполняется на любых платформах | Выполняется только на Windows |
Режим работы | Работает на языке Java и может быть скомпилирован непосредственно во время выполнения | Реализован на Visual Basic, поэтому код необходимо интерпретировать, а затем выполнить |
Безопасность | Пользователи не имеют доступа к основным настройкам системы, следовательно, нарушения и дыры в безопасности можно быстро исправить | Интерактивный сервер пользователя, подвержен ошибкам пользователя |
Поддержка | Поддержка сообщества для JDBC и его пользователей | Предоставляют большой спектр сообщества и платную поддержку. Обычно все версии ODBC используют для обеспечения долгосрочной поддержки клиентов |
Примеры
JDBC для MySQL
Данный пример использует свободный драйвер JDBC для MySQL, который легко устанавливается в большинстве дистрибутивов Linux через стандартные репозитории.
JDBC для Microsoft SQL Server
Данный пример использует jTDS, свободный драйвер JDBC для Microsoft SQL Server и Sybase ASE SQL-Server. Подключиться к этой и другим СУБД можно и встроенными средствами с помощью драйвера JDBC для ODBC, но ценой замедления работы.
Руководство по 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 для начинающих
Здравствуйте! В этой статье я напишу простой пример соединения с базами данных на Java.Эта статья предназначена новичкам.Здесь я опишу каждую строчку объясню что зачем.
Но для начала немного теории.
JDBC (Java DataBase Connectivity — соединение с базами данных на Java) предназначен для взаимодействия Java-приложения с различными системами управления базами данных (СУБД). Всё движение в JDBC основано на драйверах которые указываются специально описанным URL.
А теперь практика.
Для начала создаём maven проект и в pom.xml помещаем зависимость для соединения с СУБД (В моём случае СУБД будет выступать MySQL):
Должно получится так:
Дальше подключаемся к базе данных нужной вам(я пользуюсь IDEA Ultimate по этому я подключаюсь именно так).
Дальше заполняем Database, User и Password.Обязательно проверяем соединение.
Дальше мы создаём сам класс.
А теперь разберём его построчно:
В начале мы создаём три переменные url,username и password. Образец указания url:
Username по умолчанию root.Password вы должны знать сами.
После с помощью строчки Class.forName(«com.mysql.jdbc.Driver») регестрируем драйвера. Дальше устанавливаем соединение с помощью DriverManager.getConnection (ваш url, username, password).
После с помощью connection (соединения) создаём простой запрос Statement методом createStatement().
Дальше создаём экземпляр класса ResultSet и формируем запрос через statement методом executeQuery (запрос).
Дальше мы заставляем пробежаться resultSet по всей базе данных и вывести то что нам нужно. Так с помощью объекта resultSet и его методов (getString,getInt и т.д. в зависимости от типа переменных в колонке) мы выводим.Так как мой запрос был для того что бы вывести всё, мы можем вывести любую колонку.
После закрываем resultSet,statement и connection (именно в такой последовательности). В процессе он будет показывать ошибки так как будет запрашивать обработку исключений в catch.Так что пишите catch заранее.
Теперь когда практика есть на неё можно наложить более глубокую теорию.Тема правда очень большая, желаю удачи в её изучении.
Что такое jdbc java
JDBC основан на концепции драйверов, которые позволяют получать соединение с базой данных по специально описанному URL. При загрузке драйвер регистрирует себя в системе и в дальнейшем автоматически вызывается, когда программа требует URL, содержащий протокол, за который этот драйвер отвечает.
В чем заключаются преимущества использования JDBC?
Преимуществами JDBC считают:
Что из себя представляет JDBC URL?
JDBC URL состоит из:
Пример JDBC URL для подключения к MySQL базе данных «Test» расположенной по адресу localhost и ожидающей соединений по порту 3306: jdbc:mysql://localhost:3306/Test
Из каких частей стоит JDBC?
JDBC состоит из двух частей:
JDBC превращает вызовы уровня API в «родные» команды того или иного сервера баз данных.
Перечислите основные классы и интерфейсы JDBC.
Перечислите основные типы данных используемые в JDBC. Как они связаны с типами Java?
JDBC Type | Java Object Type |
---|---|
CHAR | String |
VARCHAR | String |
LONGVARCHAR | String |
NUMERIC | java.math.BigDecimal |
DECIMAL | java.math.BigDecimal |
BIT | Boolean |
TINYINT | Integer |
SMALLINT | Integer |
INTEGER | Integer |
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 |
CLOB | Clob |
BLOB | Blob |
ARRAY | Array |
STRUCT | Struct |
REF | Ref |
DISTINCT | сопоставление базового типа |
JAVA_OBJECT | базовый класс Java |
Опишите основные этапы работы с базой данных при использовании JDBC.
Как зарегистрировать драйвер JDBC?
Регистрацию драйвера можно осуществить несколькими способами:
Class.forName(«полное имя класса драйвера») ;
Как установить соединение с базой данных?
В качестве параметра может передаваться:
Какие уровни изоляции транзакций поддерживаются в JDBC?
Уровень изолированности транзакций — значение, определяющее уровень, при котором в транзакции допускаются несогласованные данные, то есть степень изолированности одной транзакции от другой. Более высокий уровень изолированности повышает точность данных, но при этом может снижаться количество параллельно выполняемых транзакций. С другой стороны, более низкий уровень изолированности позволяет выполнять больше параллельных транзакций, но снижает точность данных.
Во время использования транзакций, для обеспечения целостности данных, СУБД использует блокировки, чтобы заблокировать доступ других обращений к данным, участвующим в транзакции. Такие блокировки необходимы, чтобы предотвратить:
«грязное» чтение (dirty read) — чтение данных, добавленных или изменённых транзакцией, которая впоследствии не подтвердится (откатится);
неповторяющееся чтение (non-repeatable read) — при повторном чтении в рамках одной транзакции ранее прочитанные данные оказываются изменёнными;
фантомное чтение (phantom reads) — ситуация, когда при повторном чтении в рамках одной транзакции одна и та же выборка дает разные множества строк.
Уровни изоляции транзакций определены в виде констант интерфейса java.sql.Connection :
TRANSACTION_NONE – драйвер не поддерживает транзакции;
TRANSACTION_READ_UNCOMMITTED – позволяет транзакциям видеть несохраненные изменения данных: разрешает грязное, непроверяющееся и фантомное чтения;
TRANSACTION_READ_COMMITTED – любое изменение, сделанное в транзакции, не видно вне неё, пока она не сохранена: предотвращает грязное чтение, но разрешает непроверяющееся и фантомное;
TRANSACTION_REPEATABLE_READ – запрещает грязное и непроверяющееся, фантомное чтение разрешено;
TRANSACTION_SERIALIZABLE – грязное, непроверяющееся и фантомное чтения запрещены.
NB! Сервер базы данных может не поддерживать все уровни изоляции. Интерфейс java.sql.DatabaseMetaData предоставляет информацию об уровнях изолированности транзакций, которые поддерживаются данной СУБД.
При помощи чего формируются запросы к базе данных?
Для выполнения запросов к базе данных в Java используются три интерфейса:
Объекты-носители интерфейсов создаются при помощи методов объекта java.sql.Connection :
Чем отличается Statement от PreparedStatement?
Перед выполнением СУБД разбирает каждый запрос, оптимизирует его и создает «план» (query plan) его выполнения. Если один и тот же запрос выполняется несколько раз, то СУБД в состоянии кэшировать план его выполнения и не производить этапов разборки и оптимизации повторно. Благодаря этому запрос выполняется быстрее.
Суммируя: PreparedStatement выгодно отличается от Statement тем, что при повторном использовании с одним или несколькими наборами параметров позволяет получить преимущества заранее прекомпилированного и кэшированного запроса, помогая при этом избежать SQL Injection.
Как осуществляется запрос к базе данных и обработка результатов?
Выполнение запросов осуществляется при помощи вызова методов объекта, реализующего интерфейс java.sql.Statement :
Как вызвать хранимую процедуру?
Выбор объекта зависит от характеристик хранимой процедуры:
Если неизвестно, как была определена хранимая процедура, для получения информации о хранимой процедуре (например, имен и типов параметров) можно использовать методы java.sql.DatabaseMetaData позволяющие получить информацию о структуре источника данных.
Пример вызова хранимой процедуры с входными и выходными параметрами:
Как закрыть соединение с базой данных?
Соединение с базой данной закрывается вызовом метода close() у соответствующего объекта java.sql.Connection или посредством использования механизма try-with-resources при создании такого объекта, появившегося в Java 7.
NB! Предварительно необходимо закрыть все запросы созданные этим соединением.
WebEx
Блог Александра Богомолова
JDBC туториал
Этот туториал о JDBC, API предоставленным Oracle, которое позволяет программистам обращаться к различным базам данных(далее БД) из Java приложений:
В этой статье мы расмотрим основные JDBC компоненты, такие как выражения (statements), наборы результатов (result sets) и хранимые процедуры (stored procedures).
JDBC необходимы драйверы для работы с различными БД с которыми программист может захотеть работать. Мы расмотрим это в деталях и предложим несколько примеров.
JDBC поставляется вместе с Java с начала времен, первый релиз был в JDK 1.1 в феврале 1997 года и с тех времен JDBC является важной частью Java.
Вся информация о последнем релизе JDBC(4.2) о его разработке и сопровождении может быть найдена в JSR 221.
Все примеры в данной статье реализованы на Java 8 с использованием Eclipse SDK версии Luna 4.4.
Содержание
1. Компоненты
JDBC API позволяет программистам взаимодействовать с БД. Он поддерживает выполнение различных операторов SQL и получение результатов поступающих из различных источников данных.
В этой части мы попробуем суммировать и обобщить наиболее важные компонеты JDBC являющиеся частями каждого Java приложения, все они будут детально расмотрены в следующих главах.
Java приложениям необходимо создать и установить соединение с БД. Это можно сделать использую Driver Manager, для примера, экземпляр класса java.sql.DriverManager, или непосредственно используя источник данных(data source) JDBC. Для этой цели может быть использован интерфейс javax.sql.DataSource. Как уже было сказано, мы рассмотрим данный компонент детально в следующей главе.
Однажды подключившись к БД мы можем использовать наше java.sql.Connection для выполнения CRUD SQL запросов и операций. Это будет рассмотрено позже в этом туториале.
Для того, чтобы выполнить эти эти операции программист может использовать базовые классы java.sql.Statement и java.sql.PreparedStatemet. Последний более эффективен когда один и тот же запрос выполняется несколько раз и имеет другие возможности, которые мы рассмотрим позже. Интерфейс подключения JDBC предоставляет механизмы для создания экземпляров запросов:
Операции такие как insert, update, delete возвращают число модифицированных строк и ничего более.
Операции select возвращают строки внутри java.sql.ResultSet. Строки извлекаются по имени или номеру; метаданные результатов также доступны:
Обычно JDBC использует пул коннектов для управления подключениями. Есть различные реализации пула коннектов такие как C3PO или DBCP. Это группы JDBC подключений, которые используются или заимствуются из приложения, когда это необходимо, и освобождаются при завершении задания. Есть много документации по использованию и конфигурированию пула коннектов, хороший туториал может быть найден по ссылке.
Другие функции доступны при работе с JDBC: Stored Procedures, Callable Statements, Batch Processing … все это будет описано в этом руководстве.
2. Подключение(Connection)
Для подключения к БД, мы должны использовать объект java.sql.Connection. Мы можем сделать это используя метод getConnection() класса java.sql.DriverManager. Этот метод получает адрес базы данных и учетные данные в качестве параметров.
Данный пример показывает как создать подключение к локальной БД MySQL.
Объект подключения позволяет программисту выполнить следующие действия:
Мы объясним все эти особенности в деталях, на данный момент хорошо знать, что такое JDBC подключение и то, что может быть сделано с его помощью.
3. Типы данных
JDBC конвертирует Java данные в соответствующие типы данных JDBC перед размещением их в БД. Существует отображение по умолчанию между типами данных Java и JDBC, что обеспечивает согласованность между реализациями баз данных и драйверов.
Следующая таблица содержит данные отображения:
SQL | JDBC/Java | setter | getter |
---|---|---|---|
VARCHAR | java.lang.String | setString | getString |
CHAR | java.lang.String | setString | getString |
LONGVARCHAR | java.lang.String | setString | getString |
BIT | boolean | setBoolean | getBoolean |
NUMERIC | BigDecimal | setBigDecimal | getBigDecimal |
TINYINT | byte | setByte | getByte |
SMALLINT | short | setShort | getShort |
INTEGER | int | setInt | getInt |
BIGINT | long | setLong | getLong |
REAL | float | setFloat | getFloat |
FLOAT | float | setFloat | getFloat |
DOUBLE | double | setDouble | getDouble |
VARBINARY | byte[ ] | setBytes | getBytes |
BINARY | byte[ ] | setBytes | getBytes |
DATE | java.sql.Date | setDate | getDate |
TIME | java.sql.Time | setTime | getTime |
TIMESTAMP | java.sql.Timestamp | setTimestamp | getTimestamp |
CLOB | java.sql.Clob | setClob | getClob |
BLOB | java.sql.Blob | setBlob | getBlob |
ARRAY | java.sql.Array | setARRAY | getARRAY |
REF | java.sql.Ref | SetRef | getRef |
STRUCT | java.sql.Struct | SetStruct | getStruct |
Значения Null по разному обрабатываются в SQL и Java. При работе со значениями null SQL в Java хорошо следовать некоторым практическим советам, избегать использования примитивных типов, так как они не могут быть пустым, но преобразуются в значения по умолчанию, как 0 для Int, false для boolean и т.д.
Вместо этого, рекомендуется использование классов оберток для примитивных типов. Класс ResultSet содержит метод wasNull() очень полезный в данном случае. Вот пример использования:
4. Драйверы
Менеджер драйверов JDBC java.sql.DriverManager, один из наиболее важных элементов в JDBC API. Это базовый сервис содержащий список JDBC драйверов. Он содержит механизмы и объекты, которые позволяют Java-приложениям подключаться к желаемому драйверу JDBC. Он отвечает за управление различными типами драйверов баз данных JDBC. Подводя итог основной задачей менеджера драйверов должна быть осведомленность о списке доступных драйверов и обработка соединения между конкретным выбранным драйвером и БД.
Наиболее часто используемый метод данного класса DriverManager.getConnection(). Этот метод создает подключение к БД.
Вот пример его использования:
Мы можем зарегестрировать драйвер используя метод DriverManager.registerDriver():
Мы можем загрузить драйвер вызвав его методом Class.forName:
Основное отличие заключается в том, что метод registerDriver () нуждается в том, чтобы драйвер был доступен во время компиляции, загрузки класса драйвера не требуется. После JDBC 4, нет никакой необходимости вызова этих методов и приложениям не требуется в индивидуальном порядке регистрировать драйвера для загрузки классов драйверов. Также не рекомендуется регистрировать драйверы вручную с помощью метода registerDriver ().
Другой интересный метод класса DriverManager это getDriver(String url), который пытается найти драйвер с помощью данной строки и getDrivers(), который возвращает перечисление всех драйверов, которые были ранее зарегистрированы в менеджере драйвера:
5. Базы данных
JDBC поддерживает большое количество БД. Он абстрагирует их различия и способы работы используя различные драйверы. Класс DriverManager отвечает за загрузку правильной БД, после этого загруженный код для выборки и изменения данных в БД останется (более или менее) без изменений.
Вот список поддерживаемых БД(оффициально зарегестрированных Oracle): http://www.oracle.com/technetwork/java/index-136695.html.
В этой главе мы рассмотрим как использовать различные БД: MySQL и HSQLDB. Первая хорошо знакома программистам и широко используется, вторая, HSQLDB, очень полезна для целей тестирования и предлагает возможность работы в памяти. Мы увидим, как использовать обе, и обнаружим, что кроме загрузки соответствующего драйвера JDBC, остальная часть приложения остается без изменений:
В памяти (HSQLDB) пример:
Как мы можем видеть в последних примерах, код метода selectAll одинаковый, только JDBC драйвер загружается и подключение создает изменения; мы можем представить насколько это может быть полезно когда приходится работать с различным окружением. Версия HSQLDB содержит также фрагмент кода, отвечающего за создание базы данных в памяти и вставки нескольких строк, но это только для демонстрации и ясности целей и может быть сделано по-разному.
6. Наборы результатов(Result sets)
Класс java.sql.ResultSet представляет набор результатов из таблицы БД. Обычно он создается используя SQL запрос(Statement или PreparedStatement). Он содержит строки данных, где хранятся данные полученные из БД. Эти данные могут быть полученны по индексу(начинается с 1) или по имени:
Как было показано ранее, ResultSet содержит getter метод для востановления значений различных Java типов. Он также содержит курсор указывающий на текущую строку данных. В начале курсор установлен перед первой строкой. Метод java.sql.ResultSet.next() передвигает курсор на следующую строку.
Можно создать набор результатов со свойствами по умолчанию, с курсором, который движется только вперед, и не является обновляемым. Если программист захочет использовать другой вид свойств он может указать при создании Statement, что собирается получить наборы результатов, изменяя переданные аргументы:
Используя эти аргументы набора результатов можно двигать курсор в обоих направлениях и обновлять или вставлять новые данные в БД.
7. Хранимые процедуры
В этой главе мы расмотрим что такое хранимые процедуры и как их использовать вместе с JDBC. Для примера мы будем использовать хранимые процедуры MySQL.
Хранимые процедуры это набор операторов SQL как часть логической единицы исполнения и выполнения определенной задачи. Они очень полезны для инкапсулирования группы операций, которые будут выполняться в базе данных.
Первым делом мы создадим процедуру в нашей MySQL БД, следующий скрипт поможет нам с этой задачей:
Скрипт выше создает процедуру, которая называется spanish с одним выходным атрибутом типа Int и без входных параметров. Процедура возвращает количество всех стран в базе данных.
Однажды создав процедуру мы можем работать с ней из нашего Java приложения. Для вызова хранимой процедуры нам надо использовать специальные операторы интерфейса java.sql.CallableStatement, эти операторы позволяют программистам выполнять хранимые процедуры с указанием выходных атрибутов и входных параметров, которые будут использоваться. В нашем простом примере используются только выходные аргументы, вот и сам пример:
Мы можем определить, где хранить выходные данные процедуры и как выполнить ее с помощью метода java.sql.PreparedStatement.executeUpdate(). Хранимые процедуры поддерживаются большинством БД, но их синтаксис и поведение может быть различным, поэтому могут быть различия в приложениях Java в обработке хранимых процедур в зависимости от баз данных, где хранятся процедуры.
8. Выражения(Statement)
Как уже упоминалось в этом туториале, JDBC использует интерфейс java.sql.Statement для выполнения различных SQL запросов и операций вставки, обновления и удаления. Этот базовый интерфейс содержит основные методы такие как java.sql.Statement.executeQuery(String) или java.sql.Statement.executeUpdate(String).
Реализации этого интерфейса рекомендуется, когда программисту не нужно многократно выполнять тот же запрос или когда запросы и выражения не должны быть парамметризированы. В общем, можно сказать, что этот интерфейс подходит при выполнении DDL выражений(Create, Alter, Drop). Эти выражения не выполняются обычно многократно и не поддерживают различные параметры.
Обычно если программисту нужна лучшая эффективность при создании запросов SQL или параметризация он должен использовать java.sql.PreparedStatement. Этот интерфейс наследует базовый интерфейс, о чем упоминалось ранее, и предлагает параметризацию. Из-за этой функциональности, этот интерфейс является более безопасным против атак с внедрением SQL. Вот фрагмент кода, показывающий пример этого интерфейса:
Еще одно преимущество использования Prepared Statement является возможность обрабатывать нестандартные объекты, используя метод SetObject(). Вот пример использования:
Как уже упоминалось в главе, связанной с хранимыми процедурами, другой интерфейс доступен для этой цели, он называется java.sql.CallableStatement и расширяет PreparedStatement.
9. Пакетные команды
JDBC предоставляет возможность выполнить список операторов SQL в пакетном режиме, то есть все подряд. В зависимости от того, какой тип выражений программист использует код может отличаться, но общая идея та же. В следующем фрагменте кода показано, как использовать пакетную обработку с java.sql.Statement:
И используя java.sql.PreparedStatement:
Мы можем видеть, что различия в основном способе использовании параметров запроса SQL и построении запросов, но идея выполнения нескольких операторов в одной строке одна и та же. В первом случае с помощью метода java.sql.Statement.executeBatch(), используя java.sql.PreparedStatement.addBatch() и java.sql.Statement.executeBatch() во втором.
10. Транзакции
JDBC поддерживает транзакции и содержит методы и функциональные возможности для реализации приложений на основе транзакций. Мы расмотрим наиболее важные в этой главе.
И вот пример использования где мы можем видеть как отключить autocommit. Все изменения фиксируются при вызове commit() и текущие изменения транзакции откатываются с помощью метода rollback():
CRUD команды
CRUD состоит из Create(создание), Read(чтение), Update(обновление) и Delete(удаление). JDBC поддерживает все эти операции и команды, в этой главе мы покажем различные примеры Java кода выполняющего их все:
Создание. Возможно создание таблицы БД используя JDBC, вот пример создания в памяти:
Вставка. Программист может использовать обычный SQL синтаксис и вставлять его в различные классы выражений таких как Statement, PreparedStatement или CallableStatement. Вот пара примеров:
Это выражение возвращает количество вставленных строк, точно также выполняется и выражение обновления, вот пример как обновить множество строк в БД:
Выбока. Возможно выполнение любых(почти) SQL запрсов используя JDBC выражения. Вот очень простой пример читающий все строки из подключенной БД и вывод их в стандартную консоль:
Удаление. И, наконец, JDBC поддерживает удаление строк, таблиц и других элементов SQL. Вот фрагмент, показывающий удаление всех строк с определенными критериями (в данном случае, в названии должно быть «JAPAN»)
Выражение удаления возвращает количество удаленных строк, в данном случае это может быть:
Эти примеры очень просты, они написаны для изучения возможностей, но мы можем представить как использовать более сложные SQL запросы просто изменив аргумент, передаваемый методам ExecuteQuery() или executeUpdate().
12. Java 8
Java 8 не содержит каких либо серьезных изменений в существующем JDBC. Но некоторые возможности Java 8 могут быть применены с JDBC и дать очень хорошие результаты. Мы расмотрим некоторые из них. Например, можно выполнить выборку совсем по-другому, не так как мы привыкли. Вот пример как мы делали это без Java 8, он более менее такой же как мы показывали в этой статье:
А вот его версия с использованием лямбд:
Пример кода, показанный выше, содержит вызов метода выборки данных, где первым параметром является объект Connection, вторым параметром запрос SQL, а третьим лямбда-выражение. Это лямбда-выражение принимает один параметр (экземпляр ResultSet) и печатает первые два атрибута, но все, что может быть сделано с этим результатом, установленно в теле лямбда-выражения. Вот реализация метода select():
И функциональный интерфейс ResultSetHandler:
Мы можем видеть здесь, что код стал более ясным и резко сокращается (или нет) при использовании некоторых новых функций Java 8.
13. SQL библиотеки построенные на JDBC
JDBC используется несколькими хорошо известными Java-библиотеками для построения своих API. В этом разделе мы перечислим некоторые из них:
14. Юнит тестирование
Когда приходит время тестирования БД, есть несколько открытых вопросов:
Несколько библиотек могут помочь нам решить эти проблемы. В этой главе мы перечислим некоторые из них и предложим пару ссылок где может быть найдена другая полезная информация.
15. Выводы
JDBC (Java Database Connectivity) является стандартным API для связи с БД, между Java и огромным количеством БД и источников данных (БД SQL на основе Excel spreadsheets). В этом туториале мы попытались объяснить архитектуру JDBC и как его использовать, мы перечислили основные компоненты, которые использует JDBC и некоторые из драйверов для различных используемых БД, таких как MySQL.
Вот несколько ключевых пунктов для запоминания:
Этот туториал содержит некоторую информацию о новых возможностях пришедших с Java 8 связанных с JDBC таких как JOOQ. Мы также упомянули некоторые важные библиотеки реализованные с использованием JDBC, таких как Spring Data или Apache DBUtils.
16. Загрузить
Вы можете загрузить весь исходный код данного туториала здесь: jdbc_ultimate_tutorial