Разница между Statement и PreparedStatement
Изучите различия между интерфейсами JDBC Statement и PreparedStatement.
1. Обзор
2. Интерфейс API JDBC
Чтобы иметь возможность использовать Statement и PreparedStatement в наших примерах, мы объявим соединитель h2 JDBC как зависимость в нашем pom.xml файл:
Давайте определим сущность, которую мы будем использовать на протяжении всей этой статьи:
3. Заявление
Во-первых, оператор | interface принимает строки в качестве SQL-запросов. Таким образом, код становится менее читаемым когда мы объединяем SQL строки:
В первой строке обновления будет установлен столбец ” имя “на всех рядах до ” хакер “, как и все, что после “—” интерпретируется как комментарий в SQL, и условия оператора update будут проигнорированы. Во второй строке вставка завершится неудачей, так как цитата на ” имя “колонна не сбежала:
В-третьих, JDBC передает запрос со встроенными значениями в базу данных Поэтому никакой оптимизации запросов нет, а главное, компонент database engine должен обеспечить все проверки Кроме того, запрос не будет отображаться как один и тот же для базы данных и это предотвратит использование кэша Аналогично, пакетные обновления должны выполняться отдельно:
4. Подготовленное Заявление
Более того, эта функция ускоряет связь между базой данных и JVM через двоичный протокол, отличный от SQL. То есть в пакетах меньше данных, поэтому связь между серверами идет быстрее.
Затем оператор Prepared предоставляет простой способ хранения и извлечения файлов с помощью типов данных BLOB и CLOB . Точно так же он помогает хранить списки, преобразуя java.sql.Array в массив SQL.
5. Заключение
Руководство по JDBC. Утверждения (Statements).
В прошлом уроке мы изучили что такое соединение и способы его создания.
После того, как соединение было утсановлено, мы можем начинатть взаимодействие с базой данных (далее – БД).
Взаимодействовать с БД мы можем с помощью трёх интерфейсов, которые имплементируются каждым драйвером:
Создание экземпляра Statement
Прежде, чем мы сможем использовать экземпляр Statement для выполнения SQL – запросов, нам необходимо создать такой экземпляр. ДЛя этого используется метод Connection.createStatement(). В коде это выглядит таким образом:
После этго мы можем использовать наш экземпляр statement для выполнения SQL – запросов.
Для этой цели интерфейс Statement имеет три метода, которые реализуются каждой конкретной реализацией JDBC драйвера:
Закрытие экземпляра Statement
Когда мы закрываем наше соединение (Connection) для сохранения результатов в БД мы таким же образом закрываем и экpемпляр Statement.
Для этого мы испольузем метод close().
Рассмотрим, как это выглядит в нашем коде:
Для понимания того, как это работает на практике, рассмотрим пример простого приложения, в котором мы попытаемся получить данные из БД.
В результате работы программы мы получим следующий результат:
Создание экземпляра PreparedStatement
PreparedStatement наследует интерфейс Statement, что даёт нам опредёлнные преимущества перед обычным Statement. В частности, мы получаем большую гибкость при динамичской поддержке аргументов.
Вот как выглядит создание экземпляра PreparedStatement на практике:
Все параметры, которые отмечены символом ? называются маркерами параметра. Это означает, что они должны быть переданы через параметры метода.
Каждый параметр ссылается на свой порядковый номер в сигнатуре метода. Т.е. первый маркер находится на первом месте, второй – на втором и т.д. В отличие от массивов, здесь отсчёт идёт с 1. Это связано с особенностями реляционной модели, на которой и основана работа реляционных БД.
Для выполнения SQL – запросов используются методы с такими же названиями (execute(), executeQuery, executeUpdate), которые несколько модифицированы.
Закрытие экземпляра PreparedStatement
Когда мы закрываем наше соединение (Connection) для сохранения результатов в БД мы таким же образом закрываем и экземпляр PreparedStatement.
Для этого мы испольузем метод close().
Рассмотрим, как это выглядит в нашем коде:
Для понимания того, как это работает на практике, рассмотрим пример простого приложения с использованием PreparedStatement.
Пример:
В результате работы программы мы получим, примерно, следующий результат:
В этом приложении мы сначала получаем и выводим в консоль список всех записей из таблицы developer, после чего устанавливаем salary = 3000 для всех разработчиков, у которых specialty = “Java”.
Создание экземпляра CallableStatement
Экземпляр CallableStatement используется для выполнения процедур, непосредоственно в самой БД.
Рассмотрим пример, в котором нам необходимо выполнить такую процедуру в MySQL:
Существует три типа параметров: IN, OUT, INOUT. PreparedStatement использует только IN, а CallableStatement, в свою очередь, использует все три.
Рассмотрим, что же это за параметры:
В коде, создание экземпляра CallableStatement выглядит следующим образом:
Строка SQL представляет собой процедуру, с параметрами.
Схожим с PreparedStatement способом, мы, используя экземпляр CallableStatement, должны установить значения параметров.
Когда мы используем параметры типа OUT и INOUT, нам необходимозадействовать дополнительный метод registerOutParameter(). Этот метод устанавливает тип данных JDBC в тип данных процедуры.
После того, как мы вызвали рпоцедуру, мы получаем значение из параметра OUT с помощью соответствующего метода getXXX(). Этот метод преобразует полученное значение из типа дыннх SQL в тип данных Java.
Закрытие экземпляра CallableStatement
Когда мы закрываем наше соединение (Connection) для сохранения результатов в БД мы таким же образом закрываем и экземпляр Statement.
Для этого мы испольузем метод close().
Рассмотрим, как это выглядит в нашем коде:
Для понимания того, как это работает на практике, рассмотрим пример простого приложения
Пример:
Создаём процедуру в нашей БД:
В результате работы программы мы получим следующий результат:
В этом уроке мы изучили утверждения (statements) их виды и рассмотрели примеры приложений с их использованием.
В следующем уроке мы изучим такой элемент, как Result Set.
Работа с БД с помощью JDBC
1. Утверждения (Statements)
Взаимодействовать с БД мы можем с помощью трёх интерфейсов, которые реализуются каждым драйвером:
2. Интерфейс Statement
После этого мы можем использовать наш экземпляр statement для выполнения SQL – запросов. Для этой цели интерфейс Statement имеет три метода, которые реализуются каждой конкретной реализацией JDBC драйвера:
Пример 1. Создание таблицы
3. Интерфейс ResultSet
Этот интерфейс представляет результирующий набор базы данных. Он обеспечивает приложению построчный доступ к результатам запросов в базе данных.
Во время обработки запроса ResultSet поддерживает указатель на текущую обрабатываемую строку. Приложение последовательно перемещается по результатам, пока они не будут все обработаны или не будет закрыт ResultSet.
Основные методы интерфейса ResultSet:
Пример 2. Использование интерфейса ResultSet
4. Пакетное выполнение запросов
Для выполнения набора из нескольких запросов на обновление данных в интерфейс Statement были добавлены методы:
Пакетное выполнение запросов уменьшает трафик между клиентом и СУБД и может привести к существенному повышению производительности.
Пример 3. Пакетное выполнение запросов
5. Интерфейс PreparedStatement
Особенностью SQL-выражений в PreparedStatement является то, что они могут иметь параметры. Параметризованное выражение содержит знаки вопроса в своем тексте. Например:
Перед выполнением запроса значение каждого вопросительного знака явно устанавливается методами setXxx(), например:
Использование PreparedStatement приводит к более быстрому выполнению запросов при их многократном вызове с различными параметрами.
Пример 4. Использование интерфейса PreparedStatement
Пример 5. Использование интерфейса PreparedStatement
6. Использование properties файлов
Пример 6. Содержимое database.properties файла
Пример 7. Использование ResourceBundle для чтения данных для аутентификации
7. Data access object (DAO)
В программном обеспечении data access object (DAO) — это объект, который предоставляет абстрактный интерфейс к какому-либо типу базы данных или механизму хранения. DAO может использоваться для разных видов доступа к БД (JDBC, JPA).
Java JDBC Statement
Интерфейс Java JDBC, java.sql.Statement, используется для выполнения операторов SQL в реляционной базе данных. Вы получаете инструкцию JDBC из соединения JDBC. Если у вас есть экземпляр Java Statement, вы можете выполнить с ним запрос базы данных или обновление базы данных. В этом руководстве покажу как использовать Statement для выполнения запросов, обновлений и как правильно закрыть экземпляр Statement, когда вы закончите работу.
Создать заявление
Чтобы использовать Java JDBC Statement, сначала необходимо создать Statement.
Экземпляр соединения является экземпляром Java JDBC Connection.
Выполнение запроса через оператор
Как только вы создали объект Java Statement, вы можете выполнить запрос к базе данных. Вы делаете это, вызывая его метод executeQuery(), передавая оператор SQL в качестве параметра. Метод Statement executeQuery() возвращает Java JDBC ResultSet, который можно использовать для навигации по ответу на запрос. Вот пример вызова Java JDBC Statement executeQuery() и навигации по возвращенному ResultSet:
Помните, что ResultSet должен быть закрыт, когда вы закончите с ним.
Выполнить обновление через оператор
Вы также можете выполнить обновление базы данных с помощью экземпляра Java JDBC Statement. Например, вы можете выполнить вставку, обновление или удаление SQL через экземпляр Statement. Вот пример выполнения обновления базы данных с помощью экземпляра Java JDBC Statement:
RowActed, возвращаемый вызовом Statement.executeUpdate(sql), сообщает, сколько записей в базе данных было затронуто оператором SQL.
Закрытие заявления
Как только вы закончили с экземпляром Statement, вам нужно закрыть его. Вы закрываете экземпляр Statement, вызывая его метод close(). Вот пример закрытия экземпляра Java JDBC Statement:
Закрытие оператора с помощью Java Try
Чтобы правильно закрыть оператор после использования, вы можете открыть его внутри блока Java Try With Resources. Вот пример закрытия экземпляра Java JDBC Statement с использованием конструкции try-with-resources:
После выхода из блока try оператор Statement будет закрыт автоматически.
Заявление против PreparedStatement
Java JDBC API имеет интерфейс, похожий на оператор под названием PreparedStatement. PreparedStatement может иметь параметры, вставленные в оператор SQL, поэтому PreparedStatement можно использовать снова и снова с другими значениями параметров. Вы не можете сделать это с Заявлением. Оператор требует законченного оператора SQL в качестве параметра.
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



