Руководство по JDBC. Введение.
Java Database Connectivity – это стандартный API для независимого соединения языка программирования Java с различными базами данных (далее – БД).
JDBC решает следующие задачи:
- Создание соединения с БД.
- Создание SQL выражений.
- Выполнение SQL – запросов.
- Просмотр и модификация полученных записей.
Если говорить в целом, то JDBC – это библиотека, которая обеспечивает целый набор интерфейсов для доступа к различным БД.
Для доступа к каждой конкретной БД необходим специальный JDBC – драйвер, который является адаптером Java – приложения к БД.
Строение JDBC
JDBC поддерживает как 2-звенную, так и 3-звенную модель работы с БД, но в общем виде, JDBC состоит из двух слоёв.
- JDBC API
Обеспечивает соединение “приложение – JDBC Manager”. - JDBC Driver API
Обеспечивает соединение “JDBC Manager – драйвер”.
JDBC API использует менеджер драйверов и специальные драйверы БД для обеспечения подключения к различным базам данных.
JBDC Manager проверяет соответствие драйвера и конкретной БД. Он поддерживает возможность использования нескольких драйверов одновременно для одновременной работы с несколькими видами БД.
Схематично, JDBC можно представить в таком виде:
Рассмотрим элементы JDBC по отдельности.
Элементы JDBC
JDBC API состоит из следующих элементов:
- Менеджер драйверов (Driver Manager)
Этот элемент управляет списком драйверов БД. Каждой запрос на соединение требует соответствующего драйвера. Первое совпадение даёт нам соединение. - Драйвер (Driver)
Этот элемент отвечает за связь с БД. Работать с ним нам приходится крайне редко. Вместо этого мы чаще используем объекты DriverManager, которые управляют объектами этого типа. - Соединение (Connection)
Этот интерфейс обеспечивает нас методами для работы с БД. Все взаимодействия с БД происходят исключительно через Connection. - Выражение (Statement)
Для подтверждения SQL-запросов мы используем объекты, созданные с использованием этого интерфейса. - Результат (ResultSet)
Экземпляры этого элемента содержат данные, которые были получены в результате выполнения SQL – запроса. Он работает как итератор и “пробегает” по полученным данным. - Исключения (SQL Exception)
Этот класс обрабатывает все ошибки, которые могут возникнуть при работе с БД.
Пакеты JDBC
Ключевыми пакетами JDBC являются java.sql и javax.sql. На момент написания этого руководства, текущей версией JDBC является JDBC 4.0.
С отличиями этой спецификации от предыдущих вы можете ознакомиться в JDBC Specification.
Вот основные изменения:
- Улучшенная обработка исключений.
- Автоматическая загрузка драйвера БД.
- Улучшения интерфейсов Connection и Statement.
- Поддержка национальных символов.
- Поддержка типа данных SQL 2003 XML.
- Аннотации.
- Доступ SQL ROWID.
В этом уроке мы ознакомились с основами JDBC и рассмотрели его архитектуру.
В следующем уроке мы рассмотрим базовый синтаксис языка SQL.
Простой пример JDBC для начинающих
Здравствуйте! В этой статье я напишу простой пример соединения с базами данных на Java.Эта статья предназначена новичкам.Здесь я опишу каждую строчку объясню что зачем.
Но для начала немного теории.
JDBC (Java DataBase Connectivity — соединение с базами данных на Java) предназначен для взаимодействия Java-приложения с различными системами управления базами данных (СУБД). Всё движение в JDBC основано на драйверах которые указываются специально описанным URL.
А теперь практика.
Для начала создаём maven проект и в pom.xml помещаем зависимость для соединения с СУБД (В моём случае СУБД будет выступать MySQL):
mysql mysql-connector-java 5.1.38
Должно получится так:

Дальше подключаемся к базе данных нужной вам(я пользуюсь 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 заранее.
Теперь когда практика есть на неё можно наложить более глубокую теорию.Тема правда очень большая, желаю удачи в её изучении.
Этот проект на github тут.
Что такое JDBC-драйвер? Какие бывают типы?
JDBC – Java DataBase Connectivity – соединение с базами данных на Java. Это стандарт взаимодействия с БД. Его интерфейс поставляется в стандартной JDK в виде пакета java.sql . Какой бы библиотекой для работы с базой данных вы ни пользовались, в ее основе почти всегда лежит низкоуровневый JDBC.
JDBC-драйвер – реализация JDBC для определенной базы данных. В приложении может быть зарегистрировано несколько разных драйверов. При соединении к базе, нужный выбирается исходя из URL соединения. Например, для jdbc:mysql://localhost:3306/db_name будет использован MySQL JDBC драйвер (при наличии). Драйверы делятся на 4 типа:
Тип 1 – JDBC-ODBC мост. Делегирует работу с базой установленному в системе ODBC-драйверу. Платформозависимый. Не поддерживается с Java 8.
Тип 2 – Native API. Делегирует работу с базой библиотеке, установленной в системе. Платформозависимый. Библиотеки в отличие от ODBC специфичны для конкретной базы, поэтому такой драйвер обычно работает быстрее.
Тип 3 – драйвер сетевого протокола. Работает с промежуточным слоем (JavaEE сервером приложений), который транслирует запросы в сетевой протокол, с которым работает конкретная БД. Такой драйвер полностью реализован на Java.
Тип 4 – драйвер протокола БД/тонкий драйвер. Полная реализация протокола взаимодействия с базой данных. Отличается от типа 3 тем, что здесь логика протокола находится не на внешнем промежуточном слое, а прямо в самом драйвере.
Установление связи с базой данных с использованием JDBC
JDBC является библиотекой Java 2 Standard Edition (J2SE), используемой для взаимодействия с базами данных SQL. Для изучения данной статьи вам потребуется доступ к базе данных. Если у вас не установлены базы данных, можно воспользоваться базой данных MYSQL, бесплатной БД, которую можно скачать на сайте www.mysql.org. Она работает во многих операционных средах.
Кроме работающей БД, вам также потребуется JDBC-драйвер. И хотя JDBC может работать почти со всеми базами данных, вам потребуется отдельный драйвер, предназначенный именно для вашей базы данных. Драйвера могут быть различными, некоторые из них могут работать даже с несколькими базами данных. Скачать их можно, воспользовавшись ссылкой JDBC Technology — Drivers.
Драйвер отображает JDBC-команды на используемую вами базу данных. Для MySQL драйвер можно найти на сайтах Sourceforge.net и MySQL.org.
Для работы с JDBC-библиотеками вам необходимо запустить сервер БД и JDBC-драйвер. Как и при работе с любыми классами, необходимо сделать классы JDBC-драйвера доступными для компилятора и рабочего окружения. Сконфигурируйте переменную окружения CLASPATH или скопируйте соответствующий JAR-файл со всеми его классами в директорию $JAVA_HOME/jre/lib/ext, расположенную в основной инсталляционной директории Java 2 Platform (J2SE).
Установив настройки окружения для базы данных и драйвера, можно приступать к написанию программного кода. На начальном этапе работы с JDBC рассматривается решение двух задач:
Шаг 1: Загрузите необходимый JDBC драйвер. Заметьте, что сделать классы доступными для рабочего окружения недостаточно.
Шаг 2: Установите соединение с базой данных. Соединение включает в себя указание на определенный источник данных. От этого источника зависит выбор необходимого драйвера.
Далее представлены способы, позволяющие осуществить выполнение этих шагов.
Шаг 1: Загрузка JDBC-драйвера
При поверхностном рассмотрении JDBC-драйверы можно считать классами. Они должны реализовывать интерфейс java.sql.Driver, однако разработчикам редко требуется использовать этот интерфейс напрямую. Единственным требованием к реализации драйвера является то, что при загрузке класс должен самостоятельно регистрироваться при помощи java.sql.DriverManager. Выполнение данного требования находится под ответственностью поставщика драйвера, но ни в коем случае не пользователя. Вам необходимо только загрузить класс, причем сделать это можно тремя различными способами:
Первый возможный способ загрузки JDBC-драйвера:
Создайте действительный экземпляр класса. После идентификации вашей базы данных и нахождения для нее соответствующего драйвера можно жестко задать вызов к конструктору.
Например, если в пути для доступа к SQL прописано mysql-2.0.13-bin.jar, вам потребуется создать экземпляр класса org.gjt.mm.mysql.Driver:
Driver d = new org.gjt.mm.mysql.Driver () ;
Данный метод хорошо работает для загрузки драйвера, однако у него есть свои недостатки. Хотя JDBC агностируем базой данных, пользователю вашего приложения придется использовать MySQL. Если пользователь предпочитает Oracle или Sybase, то для запуска программы нужно обязательно иметь MySQL.
Другая проблема состоит в том, что, создавая экземпляр драйвера явным образом, вы фактически инициируете создание двух экземпляров. Как уже упоминалось, при загрузке класса драйвер должен регистрироваться при помощи DriverManager. Поэтому, при загрузке класс создает свой собственный экземпляр и регистрируется с помощью DriverManager. Создать второй экземпляр можно при помощи прямого обращения к конструктору.
Второй возможный способ загрузки JDBC-драйвера:
Можно избежать создания двух экземпляров драйвера путем передачи в строке методу forName класса Class имени класса. Данное имя класса должно быть полностью пригодным (например, в случае с MySQL-драйвером им может быть org.gjt.mm.mysql.Driver) и задаваться в кавычках:
Class.forName ( «org.gjt.mm.mysql.Driver» ) ;
В обоих из этих случаев жестко задается имя драйвера базы данных, однако предпочтительнее использовать второй способ. Так как драйвер динамически загружается во время рабочего цикла, то при компиляции классам драйвера вовсе не обязательно быть доступными. При этом вам не требуется жестко задавать строку. Все что вы можете сделать – это извлечь имя драйвера из командной строки (или откуда-либо еще) и передать его. Таким образом, ваша программа будет работать и с MySQL, и с любым другим сервером БД, не требуя при этом никаких изменений или перекомпиляций кода.
String driver = args [ 0 ] ;
Class.forName ( driver ) ;
Третий способ загрузки JDBC-драйвера:
В первых двух предлагаемых нами методах вам требовалось передать откуда-либо имена драйверов. Существует и третий способ загрузки драйвера, не требующий написания никакого исходного кода. Укажите драйвер или набор драйверов, установив системное свойство jdbc.drivers, как показано ниже:
java -Djdbc.drivers=org.gjt.mm.mysql.Driver ProgName
Теперь в случае необходимости драйвер будет автоматически доступен для DriverManager. Если необходимо сделать доступными несколько драйверов, напишите их список, разделив элементы знаком «двоеточие».
Шаг 2: Установление соединения с базой данных
Источники данных идентифицируются при помощи URI-адреса, начинающегося с “jdbc:”. Продолжение строки зависит от вашего JDBC-драйвера. Каждому драйверу соответствует уникальная строка для отображения на драйвер, а также определенный механизм для локализации сервера, с которым должен будет взаимодействовать драйвер.
В случае драйвера MySQL, используется строка «mysql», а локализация задается другим URI. Полная строка будет иметь следующий формат:
jdbc:mysql: //[hostname][:port]/[dbname][?param1=value1][¶m2=value2].
Более конкретно, если хост, с которым вы хотите установить соединение, расположен на вашей же машине, именем базы данных является test и вам не требуется проверка имени пользователя и пароля, то в конечном итоге строка примет следующий вид:
jdbc:mysql: //localhost/test
Если у вас есть соответствующий URI, необходимый для идентификации драйвера, и драйвер, который может установить соединение с источником данных, то возможно фактическое соединение с источником. Для подобного поиска DriverManager обеспечивает метод getConnection. Данный метод возвращает объект Connection от первого драйвера, поддерживающего специальный протокол (в данном случае mysql). Если протокол не поддерживается ни одним зарегистрированным драйвером, то во время рабочего цикла возникнет ошибка.
String uri = «jdbc:mysql://localhost/test» ;
Connection con =
DriverManager.getConnection ( uri, username, password ) ;
Имя субпротокола (в данном случае mysql) определено в документации для JDBC-драйвера.
После установки соединения доступ к источнику данных становится открытым. Тем не менее, существует и второй способ, позволяющий идентифицировать и устанавливать соединение с источником данных. Источники данных могут быть получены посредством именной службы JNDI (Java Naming and Directory Interface).
Устанавливая соединение при помощи интерфейса JNDI, вместо DriverManager используется DriverSource и Context. Конкретнее, в случае MySQL реализацией javax.sql.DriverSource является класс org.gjt.mm.mysql.jdbc2.optional.MysqlDataSource, который обычно регистрируется вне области действия приложения. Вашему приложению остается только найти источник данных, основываясь на имени, привязанному к контексту.
Context ctx = new InitialContext () ;
ctx.addToEnvironment ( Context.INITIAL_CONTEXT_FACTORY,
«com.sun.jndi.fscontext.RefFSContextFactory» ) ;
DataSource ds = ( DataSource ) ctx.lookup ( «/tmp/jdbc/test» ) ;
Connection con = ds.getConnection ( username, password ) ;
Установив соединение, вы получаете доступ к базе данных, так же, как и при поиске DriverManager. Поиск DriverManager обычно производится в контексте приложения J2EE.
О наличие доступа к JNDI окружению станет известно, так как обычно оно не настроено только на поиск JDBC-источника.
Проверить оба способа соединения с базой данных можно при помощи специального тестового комплекта MySQL. Вы сможете найти в нем контрольные примеры JNDIDataSource и выражения. Для других баз данных также существуют подобные комплекты, однако вы можете воспользоваться и этим. Вам потребуется лишь произвести незначительные настройки, указав источник данных и драйвер, соответствующий данной БД.
Проверить полученные знания можно при помощи он-лайн теста.
Интерфейсы Connection и DatabaseMetaData и класс DriverManager
JDBC обеспечивает программный интерфейс API, позволяющий при помощи языка программирования Java получать доступ к данным, хранимым в таких источниках, как реляционная база данных, а также обрабатывать их. API включает в себя пакет java.sql, называемый основным API для JDBC, а также пакет javax.sql, являющийся необязательным API для JDBC (он включен в поставку J2SE версии 1.4).
Описываемые здесь интерфейсы и класс можно найти в пакете java.sql.
Интерфейс Connection представляет сессию соединения с базой данных, обеспечиваемую драйвером. Он также обеспечивает методы для создания выражений, управления соединениями и их свойствами. Метод ConnectiongetMetaData:
public DatabaseMetaData getMetaData ()
бросает исключение SQLException.
Класс DriverManager является классом утилиты, управляющим JDBC-драйверами. Он содержит список зарегистрированных в системе JDBC-драйверов и устанавливает соединение с драйвером. Данный класс используется в основном для получения ссылки на объект Connection посредством метода getConnection:
- getConnection(String url) Пытается установить соединение с URL-адресом заданной базы данных.
- getConnection(String url, Properties info) Пытается установить соединение с URL-адресом заданной базы данных. Параметры: url – адрес в формате jdbc:subprotocol:subname, info – список произвольных пар тег/значение типа String, передаваемых в качестве аргументов соединения. Обычно должна быть включена хотя бы одна пара «имя пользователя»/«пароль».
- getConnection(String url, String user, String password) Пытается установить соединение с URL-адресом заданной базы данных. Параметры: url – адрес в формате jdbc:subprotocol:subname, user – пользователь базы данных, от имени которого устанавливается соединение, password – пароль пользователя.
Интерфейс DatabaseMetaData обеспечивает информацию о самой базе данных. Некоторые методы в этом интерфейсе принимают форму строк. Метод, извлекающий информацию о свойстве, не поддерживаемом драйвером, бросает исключение SQLException.
Вот несколько методов данного интерфейса:
- getDriverName Извлекает имя текущего JDBC-драйвера.
- getDriverVersion Извлекает значение версии JDBC-драйвера в виде строки.
- getDatabaseProductVersion Извлекает значение версии текущего продукта БД.
- Создайте программу, устанавливающую соединение с вашей базой данных
- Отобразите информацию о базе данных и о драйвере, используемом для установки соединения
Методы для получения доступа к информации о базе данных доступны посредством интерфейса DatabaseMetaData, ассоциированного с соединением.
Java Data Objects
JDO (Java Data Objects – объекты данных Java) является программным интерфейсом API, позволяющим устанавливать «прозрачный» доступ к базе данных. Программист может написать код на языке Java, организующий «прозрачный» доступ к основному хранилищу данных, не привлекая для этой цели специальный код БД.
Интерфейсы JDO и JDBC дополняют друг друга. У каждой из данных технологий есть свои преимущества, обе они могут использоваться программистами различной квалификации для широкого диапазона задач.
Интерфейс API JDBC обеспечивает большую гибкость, предоставляя программистам возможность полного контроля над доступом к базе данных и управления кэшем. JDBC является более зрелой технологией и широко принята как полноценный API.
JDO обеспечивает программистам дополнительные удобства, а также контроль типов во время компиляции. Кроме того, JDO скрывает от программистов SQL, так что его изучение становится необязательным.
API JDO создается в Java Community Process.
A может Вас также заинтересует что-нибудь из этого:
- Java и базы данных → Вот здесь можно узнать больше об базе данных cloudscape. Часть 1
- Java и базы данных → Вот здесь можно узнать больше об базе данных cloudscape. Часть 2
- Java и базы данных → Вот здесь можно узнать больше об базе данных cloudscape. Часть 3
- Java и базы данных → Hibernate: Связи вида Многие-ко-Многим и Один-к-Одному
- Java и базы данных → Hibernate: Пользовательские типы в hibernate. Разбираемся с компонентами
- Java Standard Edition → Гибкое журналирование с помощью log4j
