Программное JDBC-подключение

Содержание раздела
  1. Реализация программного JDBC-подключения к системе
  2. Пример класса для реализации подключения по JDBC

JDBC-драйвер системы позволяет подключаться программно (без использования SQL-клиента). Вы можете реализовать свое приложение, работающее с системой по JDBC.

Реализация программного JDBC-подключения к системе

Чтобы реализовать программное подключение к системе по JDBC:

  1. Включите библиотеку JDBC-драйвера в свой проект.
  2. В реализации класса вашего приложения, отвечающего за подключение к системе (см. базовый пример в секции ниже):
    1. Импортируйте пакеты Java SQL:
      import java.sql.*;
      
    2. (Опционально) Задайте максимальное количество запросов, исполняемых синхронно в одном подключении, с помощью параметра statementConcurrency. По умолчанию значение равно 2.

      Например:

      Properties properties = new Properties();
      properties.setProperty("statementConcurrency", "1");
      
    3. (Опционально) Задайте размер буфера данных, получаемых от системы Prostore, с помощью параметра receiveBufferSize. По умолчанию значение равно 524288 байт (512 Кбайт).

      Например:

      properties.setProperty("receiveBufferSize", "256 * 1024");
      
    4. (Опционально) Определите формат передачи данных между драйвером и системой:
      • Задайте формат из следующих:
        • avro — Avro-формат без сжатия (используется по умолчанию);
        • json — JSON-строка;
        • avro-deflate — Avro-формат со сжатием по алгоритму Deflate;
        • avro-snappy — Avro-формат со сжатием по алгоритму Snappy;
        • avro-bzip2 — Avro-формат со сжатием по алгоритму BZip2;
        • avro-xz — Avro-формат со сжатием по алгоритму XZ;
        • avro-zstandard — Avro-формат со сжатием по алгоритму Zstandard.

      Например:

      properties.setProperty("format", "avro-snappy");
      
      • Если вы используете Avro-формат со сжатием, задайте уровень сжатия данных, например:
      properties.setProperty("compressionLevel", "3");
      

      Доступные уровни сжатия данных для каждого из алгоритмов см. в документации Apache Avro.

      • Если вы используете Avro-формат avro-snappy или avro-xz, подключите нужные зависимости:
      <dependency>
          <groupId>org.xerial.snappy</groupId>
          <artifactId>snappy-java</artifactId>
      </dependency>
      <dependency>
          <groupId>org.tukaani</groupId>
          <artifactId>xz</artifactId>
      </dependency>
      
    5. Установите соединение с системой с помощью метода DriverManager.getConnection() в следующем формате:
      // Адрес подключения
      String url = "jdbc:prostore://ProstoreNodeHost:portNumber/logicalDatabaseName";
             
      // Установка соединения в случае, если используется формат передачи данных по умолчанию (Avro без сжатия)
      Connection connection = DriverManager.getConnection(url);
      // Установка соединения в случае, если используется формат передачи данных, заданный в параметрах подключения
      Connection connection = DriverManager.getConnection(url, properties);
      

      Где:

      • prostoreNodeHost — IP-адрес или имя хоста с нодой Prostore;
      • portNumber — номер порта для подключения;
      • (опционально) logicalDatabaseName — имя логической базы данных, используемой по умолчанию.
    6. Выполните вызов нужных запросов SQL+ и по завершении обработки их результатов закройте подключение (см. примеры в разделе Как прочитать данные).

Пример класса для реализации подключения по JDBC

В примере ниже показана базовая реализация класса SimpleDtmJDBCExample, который задает формат передачи данных (avro-snappy), устанавливает соединение с системой по указанному адресу и закрывает соединение.

import java.sql.*;
import java.util.Properties;
public class SimpleProstoreJDBCExample {
    public static void main(String[] args) {
        String url = "jdbc:prostore://localhost:9090/marketing";
        Properties properties = new Properties();
        properties.setProperty("statementConcurrency", "1");
        properties.setProperty("receiveBufferSize", "256 * 1024");
        properties.setProperty("format", "avro-snappy");
        properties.setProperty("compressionLevel", "3");
        try (Connection connection = DriverManager.getConnection(url, properties)) {
            System.out.println("Connected");
            // Добавьте логику работы с подключением
        } catch (SQLException error) {
            //  Добавьте логику обработки SQL-ошибок
            error.printStackTrace();
        }
    }
}