Java DataBase Connectivity

Ты знаешь основы SQL. Это хорошо. Но сегодня тебе станет еще лучше. Сегодня ты начнешь изучать, как работать с базой данных из Java-приложения.

Различных СУБД очень много, поэтому создатели Java решили стандартизировать работу Java-приложения с базами данных. И назвали они этот стандарт – JDBC: Java DataBase Connectivity.

В JDBC есть 3 основных интерфейса:

  • Connection – отвечает за соединение с базой данных
  • Statement – отвечает за запрос к базе данных
  • ResultSet – отвечает за результат запроса к базе данных

Фактически, это все. И мы даже не будем изучать все методы всех интерфейсов. Только рабочие примеры, которые понемногу будем усложнять.

JDBC чем-то напоминает работу с сервлетами. Создатели JDBC написали несколько интерфейсов и гордо назвали это Java DataBase API. А реализацию этих интерфейсов возложили на… создателей СУБД. Как оно там реализовано – никого не интересует. Работает и ладно.

Есть четыре версии JDBC и мы будет изучать самую последнюю. И не потому, что она самая крутая, а потому что она самая простая.

JDBC Driver Manager

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

Правильные JDBC драйвер же выбирается с помощью класса под названием DriverManager. Их взаимодействие можно представить такой картинкой:

Штука в том, что ты можешь использовать In-Memory-DB, No-SQL-DB или даже базу данных, встроенную в Android-приложение. Тебя, как Java-разработчика, эти нюансы вообще не касаются. Driver Manager выберет вам правильный JDBC драйвер и все будет работать как часы.

Кстати, а как он это делает?

Подключаемся к MySQL-серверу

Помнишь, что тебе было нужно, чтобы подключиться к локальному SQL-серверу через MySQL Workbench? Если забыл, то я напомню, тебе были нужны три вещи:

  • host
  • login
  • password

С логином и паролем все понятно, а host, если ты помнишь – это имя компьютера, на котором расположен сервер. Если он расположен у тебя на локальном компьютере, то в качестве имени хоста нужно указать localhost. А если не на локальном?

Тогда нужно использовать … URL. URL расшифровывается как Universal Resource Locator. Его можно использовать для указания месторасположения чего-угодно в сети: сайта, принтера, SQL-сервера. На самом деле URL используется и для доступа к локальному SQL-серверу. Он имеет примерно такой вид:


mysql://localhost:3306/db_scheme
  • mysql – это протокол работы с сервером
  • localhost – имя хоста в сети
  • 3306 – порт, по которому идут запросы
  • db_scheme – имя схемы (имя базы данных)

Примечание. Имя базы данных можно не указывать. Но если сервер хранит много схем баз данных, то обычно к ним создают разных пользователей и разными правами доступа. И если у пользователя, под которым ты логинишься на SQL-сервер нет доступа ко всем базам, то тебе обязательно нужно указать имя конкретной базы, к которой у тебя есть доступ.

В конце этого url могут идти различные параметры, типы кодировки, timezone, которые считаются параметрами для нового устанавливаемого соединения с базой данных.

Также протокол может быть составным. Если все общение с сервером базы данных идет по зашифрованному каналу с помощью SSH-протокола, тогда URL может быть указан так:


ssh:mysql://localhost:3306/db_scheme

Протокол – это не обязательно внешняя программа. Например, если ты работаешь с сервером по протоколу JNDI, то можешь указать его так:


jndi:mysql://localhost:3306/db_scheme

А если хочешь работать по протоколу JDBC API, то нужно писать так:


jdbc:mysql://localhost:3306/db_scheme

Когда ты пытаешься создать подключение к базе данных, то JDBC Driver Manager анализирует ваш SQL-db-URL и определяет имя JDBC-драйвера по имени протокола. Вот такая вот маленькая хитрость.