JDBC (Java DataBase Connectivity)

Материал из Национальной библиотеки им. Н. Э. Баумана
Последнее изменение этой страницы: 21:30, 16 февраля 2019.
JDBC
Jdbc logo.png
Разработчики: Oracle Corporation
Выпущена: 5 December 2013 года; 6 years ago (2013-12-05)
Постоянный выпуск: JDBC 4.2
Тип ПО: Data Access API
Веб-сайт JDBC

JDBC (англ. Java DataBase Connectivity) — платформенно-независимый промышленный стандарт взаимодействия Java-приложений с различными СУБД, реализованный в виде пакета java.sql, входящего в состав Java SE[Источник 1].

Архитектура

Рисунок 1 – Архитектура Java Applet/Application

JDBC API содержит два основных типа интерфейсов: первый — для разработчиков приложений и второй (более низкого уровня) — для разработчиков драйверов. Технологии драйверов JDBC лежат в одной из четырех категорий. Приложения и апплеты[1] могут обращаться к БД через JDBC API, используя новые драйвера на основе технологии JDBC, как показано на рисунке 1[Источник 2].

Рисунок 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 считают:

  • Лёгкость разработки: разработчик может не знать специфики базы данных, с которой работает;
  • Код практически не меняется, если компания переходит на другую базу данных (количество изменений зависит исключительно от различий между диалектами SQL);
  • Не нужно устанавливать громоздкую клиентскую программу;
  • К любой базе можно подсоединиться через легко описываемый URL.

Недостатками 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 через стандартные репозитории.

package javaapplication1;
import java.sql.*;

public class Main {

    public static void main(String[] args) throws SQLException {
        /**
         * эта строка загружает драйвер DB.
         * откомментируйте если прописываете драйвер вручную
         */
        //Class.forName("com.mysql.jdbc.Driver");
        Connection conn = null;
        try {
            conn = DriverManager.getConnection(
            "jdbc:mysql://localhost:3306/db_name",
            "user", "password");

            if (conn == null) {
                System.out.println("Нет соединения с БД!");
                System.exit(0);
            }
            
            Statement stmt = conn.createStatement();
            ResultSet rs = stmt.executeQuery("SELECT * FROM users");
    
            while (rs.next()) {
                System.out.println(rs.getRow() + ". " + rs.getString("firstname")
                        + "\t" + rs.getString("lastname"));
            }
    
            /**
             * stmt.close();
             * При закрытии Statement автоматически закрываются
             * все связанные с ним открытые объекты ResultSet
             */
            stmt.close();
        }
        catch (SQLException e) {
            e.printStackTrace();
        } finally{
            if (conn != null){
                conn.close();
            }
        }
    }
}

JDBC для Microsoft SQL Server

Данный пример использует jTDS, свободный драйвер JDBC для Microsoft SQL Server и Sybase ASE SQL-Server. Подключиться к этой и другим СУБД можно и встроенными средствами с помощью драйвера JDBC для ODBC, но ценой замедления работы.

/**
 * эта строка указывает альтернативный драйвер DB. Например hsql.
 */

// Class.forName("org.hsqldb.jdbcDriver");


Connection conn = DriverManager.getConnection(
    "jdbc:jtds:sqlserver://SERVER/Northwind;instance=INST;domain=Sample_NTLM_Domain",
    "user", "password");

Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery("SELECT LastName + ' ' + FirstName AS FullName, Address FROM Employees");

while(rs.next())
{
    System.out.println(rs.getString("FullName") + "\t" + rs.getString("Address"));
}

rs.close();
stmt.close();

Примечания

  1. Несамостоятельный компонент программного обеспечения, работающий в контексте другого

Источники

  1. JDBC - Overview // Oracle Docs. URL: https://www.oracle.com/technetwork/java/overview-141217.html (дата обращения: 20.12.2018)
  2. JDBC - Architecture // Oracle Docs. URL: https://docs.oracle.com/javase/tutorial/jdbc/overview/architecture.html (дата обращения 20.12.2018)