Рубрики
Без рубрики

Формат URL JDBC Для Различных Баз Данных

Более подробно рассмотрим форматы URL-адресов JDBC нескольких широко используемых баз данных: Oracle, MySQL, Microsoft SQL Server и PostgreSQL

Автор оригинала: Kai Yuan.

1. Обзор

Когда мы работаем с базой данных на Java, обычно мы подключаемся к базе данных с помощью JDBC .

URL-адрес JDBC является важным параметром для установления связи между нашим Java-приложением и базой данных. Однако формат URL-адреса JDBC может быть разным для разных систем баз данных.

В этом уроке мы более подробно рассмотрим форматы URL-адресов JDBC нескольких широко используемых баз данных: Oracle , MySQL , Microsoft SQL Server и PostgreSQL .

2. Форматы URL-адресов JDBC для Oracle

Системы баз данных Oracle широко используются в корпоративных Java-приложениях. Прежде чем мы сможем взглянуть на формат URL-адреса JDBC для подключения баз данных Oracle, мы должны сначала убедиться, что драйвер Oracle Thin database находится в нашем пути к классам.

Например, если ваш проект управляется Maven, нам нужно добавить ojdbc14 зависимость в ваш pom.xml :


    com.oracle
    ojdbc14
    10.2.0.4.0

Из-за некоторых проблем с лицензией Центральный репозиторий Maven указывает только на POM-файл этого артефакта. Поэтому нам нужно скачать jar и вручную установить его в наш репозиторий Maven.

Тонкий драйвер предлагает несколько видов форматов URL JDBC:

Далее мы рассмотрим каждый из этих форматов.

2.1. Подключение к базе данных Oracle SID

В некоторых более старых версиях базы данных Oracle база данных определяется как СТОРОНА. Давайте посмотрим формат URL JDBC для подключения к SID:

jdbc:oracle:thin:[/]@[:]:

Например, предположив, что у нас есть хост сервера баз данных Oracle ” myoracle.db.server:1521 “, а имя SID – ” my_sid “, мы можем следовать приведенному выше формату для построения URL-адреса подключения и подключения к базе данных:

@Test
public void givenOracleSID_thenCreateConnectionObject() {
    String oracleJdbcUrl = "jdbc:oracle:thin:@myoracle.db.server:1521:my_sid";
    String username = "dbUser";
    String password = "1234567";
    try (Connection conn = DriverManager.getConnection(oracleJdbcUrl, username, password)) {
        assertNotNull(conn);
    } catch (SQLException e) {
        System.err.format("SQL State: %s\n%s", e.getSQLState(), e.getMessage());
    }
}

2.2. Подключение к имени службы базы данных Oracle

Формат URL-адреса JDBC для подключения баз данных Oracle через имя службы очень похож на тот, который мы использовали для подключения через SID:

jdbc:oracle:thin:[/]@//[:]/

Мы можем подключиться к сервису ” my_service name “на сервере базы данных Oracle” my oracle.db.server:1521 “:

@Test
public void givenOracleServiceName_thenCreateConnectionObject() {
    String oracleJdbcUrl = "jdbc:oracle:thin:@//myoracle.db.server:1521/my_servicename";
    ...
    try (Connection conn = DriverManager.getConnection(oracleJdbcUrl, username, password)) {
        assertNotNull(conn);
        ...
    }
    ...
}

2.3. Подключение к базе данных Oracle С помощью tnsnames.Записи ora

Мы также можем включить записи tnsnames.ora в URL-адрес JDBC для подключения к базам данных Oracle:

jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=)(PORT=))(CONNECT_DATA=(SERVICE_NAME=)))

Давайте посмотрим, как подключиться к нашему сервису ” my_servicename “, используя записи из файла tnsnames.ora :

@Test
public void givenOracleTnsnames_thenCreateConnectionObject() {
    String oracleJdbcUrl = "jdbc:oracle:thin:@" +
      "(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)" +
      "(HOST=myoracle.db.server)(PORT=1521))" +
      "(CONNECT_DATA=(SERVICE_NAME=my_servicename)))";
    ...
    try (Connection conn = DriverManager.getConnection(oracleJdbcUrl, username, password)) {
        assertNotNull(conn);
        ...
    }
    ...
}

3. Форматы URL-адресов JDBC для MySQL

В этом разделе давайте обсудим, как написать URL-адрес JDBC для подключения к базам данных MySQL.

Чтобы подключиться к базе данных MySQL из вашего Java-приложения, давайте сначала добавим драйвер JDBC mysql-connector-java dependency в наш pom.xml :


    mysql
    mysql-connector-java
    8.0.22

Далее давайте посмотрим на общий формат URL-адреса подключения, поддерживаемый драйвером MySQL JDBC:

protocol//[hosts][/database][?properties]

Рассмотрим пример подключения к базе данных MySQL ” my_database “на хосте” mysql.db.server “:

@Test
public void givenMysqlDb_thenCreateConnectionObject() {
    String jdbcUrl = "jdbc:mysql://mysql.db.server:3306/my_database?useSSL=false&serverTimezone=UTC";    
    String username = "dbUser";
    String password = "1234567";
    try (Connection conn = DriverManager.getConnection(jdbcUrl, username, password)) {
        assertNotNull(conn);
    } catch (SQLException e) {
        System.err.format("SQL State: %s\n%s", e.getSQLState(), e.getMessage());
    }
}

URL-адрес JDBC в приведенном выше примере выглядит просто. Он состоит из четырех строительных блоков:

  • протоколjdbc:mysql:
  • хостmysql.db.server:3306
  • база данныхmy_database
  • свойстваuseSSL=false&serverTimezone=UTC

Однако иногда мы можем столкнуться с более сложными ситуациями, такими как различные типы соединений или несколько хостов MySQL и так далее.

Далее мы более подробно рассмотрим каждый строительный блок.

3.1. Протокол

За исключением обычных ” jdbc:mysql: “протокол, коннектор-java Драйвер JDBC по-прежнему поддерживает протоколы для некоторых специальных соединений:

Когда мы говорим о балансировке нагрузки и репликации JDBC, мы можем понять, что должно быть несколько хостов MySQL.

Далее давайте проверим детали другой части URL — адреса подключения – hosts .

3.2. Хосты

Мы видели пример URL-адреса JDBC для определения одного хоста в предыдущем разделе — например, mysql.db.server:3306.

Однако если нам нужно обработать несколько хостов, мы можем перечислить хосты в списке, разделенном запятыми: host1, host2,…,hostN .

Мы также можем заключить разделенный запятыми список хостов в квадратные скобки: [хост1, хост2,…,хостН] .

Давайте рассмотрим несколько примеров URL-адресов JDBC для подключения к нескольким серверам MySQL:

  • jdbc:mysql://myhost1:3306,myhost2:3307/db_name
  • jdbc:mysql://[myhost1:3306,myhost2:3307]/db_name
  • jdbc:mysql:loadbalance://myhost1:3306,myhost2:3307/db_name?user=dbUser&password=1234567&loadBalanceConnectionGroup=group_name&ha.enableJMX=true

Если мы внимательно рассмотрим последний пример выше, то увидим, что после имени базы данных есть некоторые определения свойств и учетных данных пользователя. Мы посмотрим на них в следующий раз.

3.3. Свойства и учетные данные пользователя

Допустимые глобальные свойства будут применены ко всем хостам. Свойствам предшествует знак вопроса “ ? “и записывается как ключ=значение пары, разделенные символом” & :

jdbc:mysql://myhost1:3306/db_name?prop1=value1&prop2=value2

Мы также можем поместить учетные данные пользователя в список свойств :

jdbc:mysql://myhost1:3306/db_name?user=root&password=mypass

Кроме того, мы можем префиксировать каждый хост учетными данными пользователя в формате “ user: [email protected] :

jdbc:mysql://root:[email protected]:3306/db_name

Далее, если наш URL-адрес JDBC содержит список хостов и все хосты используют одни и те же учетные данные пользователя, мы можем префиксировать список хостов :

jdbc:mysql://root:mypass[myhost1:3306,myhost2:3307]/db_name

В конце концов, также можно предоставить учетные данные пользователя вне URL-адреса JDBC .

Мы можем передать имя пользователя и пароль DriverManager.getConnection(String url, String user, String password) метод, когда мы вызываем метод для получения соединения.

4. Формат URL-адреса JDBC для Microsoft SQL Server

Microsoft SQL Server-еще одна популярная система баз данных. Чтобы подключить базу данных MS SQL Server из Java-приложения, нам нужно добавить mssql-jdbc зависимость в ваш pom.xml :


    com.microsoft.sqlserver
    mssql-jdbc
    8.4.1.jre11

Далее давайте рассмотрим, как построить URL-адрес JDBC для получения подключения к MS SQL Server.

Общий формат URL-адреса JDBC для подключения к базе данных MS SQL Server::

jdbc:sqlserver://[serverName[\instanceName][:portNumber]][;property=value[;property=value]]

Давайте подробнее рассмотрим каждую часть формата.

  • ServerName – адрес сервера, к которому мы подключимся; это может быть доменное имя или IP-адрес, указывающий на сервер
  • InstanceName – экземпляр для подключения к on ServerName ; это необязательное поле, и экземпляр по умолчанию будет выбран, если это поле не указано
  • PortNumber – это порт для подключения к on ServerName (порт по умолчанию 1433 )
  • properties – может содержать одно или несколько необязательных свойств соединения, которые должны быть разделены точкой с запятой, и повторяющиеся имена свойств не допускаются

Теперь предположим, что у нас есть база данных MS SQL Server, работающая на хосте ” mssql.db.server “, имя экземпляра на сервере – “ mssql_instance “, а имя базы данных, которую мы хотим подключить, – “ my_database “.

Давайте попробуем получить соединение с этой базой данных:

@Test
public void givenMssqlDb_thenCreateConnectionObject() {
    String jdbcUrl = "jdbc:sqlserver://mssql.db.server\\mssql_instance;databaseName=my_database";
    String username = "dbUser";
    String password = "1234567";
    try (Connection conn = DriverManager.getConnection(jdbcUrl, username, password)) {
        assertNotNull(conn);
    } catch (SQLException e) {
        System.err.format("SQL State: %s\n%s", e.getSQLState(), e.getMessage());
    }
}

5. Формат URL-адреса JDBC для PostgreSQL

PostgreSQL-популярная система баз данных с открытым исходным кодом. Для работы с PostgreSQL драйвер JDBC postgresql должен быть добавлен в качестве зависимости в ваш pom.xml :


    org.postgresql
    postgresql
    42.2.18

Общая форма URL-адреса JDBC для подключения к PostgreSQL такова:

jdbc:postgresql://host:port/database?properties

Теперь давайте рассмотрим каждую часть в приведенном выше формате URL-адреса JDBC.

Параметр host – это доменное имя или IP – адрес сервера базы данных.

Если мы хотим указать IPv6-адрес, то хозяин параметр должен быть заключен в квадратные скобки, например, jdbc:postgresql://[::1]:5740/my_database .mysql

Параметр port указывает номер порта, который прослушивает PostgreSQL. Параметр port является необязательным, а номер порта по умолчанию – 5432 .

Как следует из его названия, параметр database определяет имя базы данных, к которой мы хотим подключиться.

Параметр properties может содержать группу пар key=value , разделенных символом” & “.

После понимания параметров в формате URL JDBC давайте рассмотрим пример того, как получить соединение с базой данных PostgreSQL:

@Test
public void givenPostgreSqlDb_thenCreateConnectionObject() {
    String jdbcUrl = "jdbc:postgresql://postgresql.db.server:5430/my_database?ssl=true&loglevel=2";
    String username = "dbUser";
    String password = "1234567";
    try (Connection conn = DriverManager.getConnection(jdbcUrl, username, password)) {
        assertNotNull(conn);
    } catch (SQLException e) {
        System.err.format("SQL State: %s\n%s", e.getSQLState(), e.getMessage());
    }
}

В приведенном выше примере мы подключаемся к базе данных PostgreSQL с помощью:

  • хост:порт – postgresql.db.server:5430
  • база данныхmy_database
  • свойства – ssl=true&loglevel=2

6. Заключение

В этой статье рассматриваются форматы URL-адресов JDBC четырех широко используемых систем баз данных: Oracle, MySQL, Microsoft SQL Server и PostgreSQL.

Мы также видели различные примеры построения строки URL-адреса JDBC для получения соединений с этими базами данных.

Как всегда, полный исходный код статьи доступен на GitHub .