7
июнь
2023
Как связать LibreOffice Base с MySQL
15:45

Как связать LibreOffice Base с MySQL

7 июнь 2023 15:45

В данной статье рассказываю о том, как в Linux передавать информацию из MySQL в Libreoffice Base.

Предисловие

Пакет LibreOffice входит в комплект поставки многих, если не всех дистрибутивов Linux. Также, его можно установить из репозитория и загрузить в виде DEB или RPM файла.

Введение

На работе примерно раз в месяц делал сверку исходного файла Excel с базой данных MySQL. Связь с MySQL реализовал при помощи LibreOffice Base и коннектора ODBC.

LibreOffice Base - аналог программы MS Access.
База данных регистрируется в операционной системе Linux под уникальным именем, доступным из программ LibreOffice Calc, Writer и из LibreOffice Basic.

Между СУБД MySQL и LibreOffice Base я использовали\ коннектор ODBC. Позднее, получилось использовать подключение через JDBC.

Схема подключения программ

shema

СУБД MySql <-> mysql коннектор ODBC/JDBC <-> LibreOffice Base <-> Libreoffice Calc

0. Установка MySQL и LibreOffice

Установка MySQL рассмотрена в предыдущей статье про MySQL.
Как установить пакет LibreOffice в Linux - см. статью wiki.

1. База данных

Базы данных, как всем известно, предназначены для хранения информации. Как правило, они представляют собой набор связанных между собой таблиц (реляционная БД). В простых БД одна из таблиц обязательно является главной (например, журнал операций или товары на складе) - остальные лишь справочники. В моём случае использовалась одна главная таблица "offers", из которой я производил выборку при помощи запросов.

Для целей тестирования, я покажу на примере, а не на реальной базе данных. Состав полей упрощён для примера.

Таблица offers

  • ID - integer (уникальное поле ключа)
  • NAME - наименование
  • DESCRIPTION - описание
  • PRICE - цена
  • DISPLAY - признак (0 или -1 - не показывать (скрытая запись/продано), 1 или 2 - выводить (в продаже / акция)

CREATE DATABASE primer;

USE primer;

DROP TABLE IF EXISTS offers;
CREATE TABLE offers (
offer_id int(11) NOT NULL AUTO_INCREMENT,
name varchar(256) COLLATE utf8_unicode_ci DEFAULT NULL,
description varchar(4096) COLLATE utf8_unicode_ci DEFAULT NULL,
price int(11) DEFAULT NULL,
display int(11) DEFAULT '1',
PRIMARY KEY (offer_id)
) ENGINE=InnoDB AUTO_INCREMENT=546 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

INSERT INTO offers VALUES (1,'AAAA', '', 10000, 1),(2,'BBBB', '', 80, 1),(3,'CCCCC', '', 555, 0),(4,'DD', '', 7, 1);

Файл дампа БД primer для MYSQL:
primer.sql.zip

Чтобы создать базу данных, выполняем этот скрипт от имени пользователя базы данных root:

mysql -u root -p
source primer.sql

2. Способы подключения к MySQL

Все программные способы подключения к MySQL перечислены на странице https://www.mysql.com/products/connector/ - есть фирменные драйверы ADO.NET, JDBC, ODBC, Python и разработанные сообществом PHP Drivers for MySQL и др.

Я проверил способа подключения к MySQL - ODBC или JDBC.
Преимущество отдал ODBC, т.к. пользуюсь давно.

Но можно установить любой из способов:

  • ODBC коннектор для MySQL - см. параграф 2.1
  • JDBC коннектор для MySQL - см. параграф 2.2

2.1 Установка ODBC коннектора для MySQL

Узнаем номер версии ОС:

lsb_release -a

Загрузите дистрибутив ODBC коннектора для вашей версии Ubuntu или Debian.
Для этого переходим на следующую страницу:
https://dev.mysql.com/downloads/connector/odbc/
Где загружаем дистрибутив ODBC коннектора для MySQL для своей операционной системы:

Если дистрибутив Linux Mint, узнайте кодовую базу (package base) можно узнать запросом в поисковике.
Например, для Limux Mint 21.1 - кодовая база Ubuntu составляет 22.04.

То есть для Linux Mint 21.x нужно загружать Ubuntu Linux 22.04 (x86, 64-bit), DEB Package (mysql-connector-odbc_8.2.0-1ubuntu22.04_amd64.deb) без символов отладки (dbg) размером 1.9 МБ. На следующей странице нажимаем "No thanks, just start my download".

Устанавливаем загруженный пакет ODBC-коннектора (DEB-файл) двойным щелчком мыши с зависимостями (3 шт.).

Запускаем из терминала исполняемый файл myodbc-installer - он выведет справку по использованию коннектора из командной строки:

myodbc-installer 

Он выведет справку по программе:

[ERROR] Not enough arguments given
+---                                                                   
 myodbc-installer v8.02.0000                                 
+---                                                                   

 Description                                                          

    This program is for managing MySQL Connector/ODBC configuration   
    options at the command prompt. It can be used to register or      
    unregister an ODBC driver, and to create, edit, or remove DSN.    

    The program has been designed to work across all platforms        
    supported by Connector/ODBC, including MS Windows and             
    various Unix-like systems.                                        

    The program requires that unixODBC version 2.2.14 or newer        
    has already been installed on the system.                         
    UnixODBC can be downloaded from here:                             
    http://www.unixodbc.org/                                          

 Syntax                                                               

    myodbc-installer   [Options]                      

 Object                                                               

     -d driver                                                        
     -s datasource                                                    

 Action                                                               

     -l list                                                          
     -a add (add/update for data source)                              
     -r remove                                                        
     -h display this help page and exit                               

 Options                                                              

     -n                                                         
     -t                                             
        if used for handling data source names the  
        can contain ODBC options for establishing connections to MySQL
        Server. The full list of ODBC options can be obtained from    
        http://dev.mysql.com/doc/connector-odbc/en/                   
     -c0 add as both a user and a system data source                  
     -c1 add as a user data source                                    
     -c2 add as a system data source (default)                        

 Examples                                                             

    List drivers                                                      
    shell> myodbc-installer -d -l                                     

    Register a Unicode driver (UNIX example)                          
    shell> myodbc-installer -d -a -n "MySQL ODBC 8.2 Unicode Driver" \ 
              -t "DRIVER=/path/to/driver/libmyodbc8w.so;SETUP=/path/to/gui/myodbc8S.so"

      Note                                                            
         * The /path/to/driver is /usr/lib for 32-bit systems and     
           some 64-bit systems, and /usr/lib64 for most 64-bit systems

         * driver_name is libmyodbc8a.so for the ANSI version and     
           libmyodbc8w.so for the Unicode version of MySQL ODBC Driver

         * The SETUP parameter is optional; it provides location of   
           the GUI module (libmyodbc8S.so) for DSN setup, which       
           is not supported on Solaris and Mac OSX systems            

    Add a new system data source name for Unicode driver              
    shell> myodbc-installer -s -a -c2 -n "test" \                  
              -t "DRIVER=MySQL ODBC 8.2 Unicode Driver;SERVER=localhost;DATABASE=test;UID=myid;PWD=mypwd"

    List data source name attributes for 'test'                       
    shell> myodbc-installer -s -l -c2 -n "test"                    
+---  

Обращем внимание, что версия ODBC-коннектора 8.0.2 соответствует версии mysql сервера - 8.0.35.

Наша задача создать источник данных DSN!

Настройки DSN для ODBC хранятся в текстовом файле конфигурации /etc/odbc.ini

Вначале выполним проверку установленных драйверов ODBC:

myodbc-installer -d -l

Результат:
MySQL
MySQL ODBC 8.2 Unicode Driver
MySQL ODBC 8.2 ANSI Driver

Добавление нового системного источника DSN данных ODBC с именем "primer",
подключенного к базе данных mysql "primer" (выполнять с sudo!).
Обращаем внимание на параметры подключения, передаваемые в ключе -t:

Краткая команда - после неё потребуется редактирование /etc/odbc.ini:

sudo myodbc-installer -s -a -c2 -n "primer" -t "DRIVER=MySQL ODBC 8.2 Unicode Driver;SERVER=localhost;DATABASE=primer;Socket=/var/run/mysqld/mysqld.sock"

Полная команда (рекомендуется) - после неё редактировать файл /etc/odbc.ini не нужно.

 sudo myodbc-installer -s -a -c2 -n "primer" -t "DRIVER=MySQL ODBC 8.2 Unicode Driver;SERVER=localhost;DATABASE=primer;UID=root;PWD=11111;Port=3306;Socket=/var/run/mysqld/mysqld.sock"

Если нужно удалить ошибочный источник данных, команда: sudo /myodbc-installer -s -r -n primer_err

где -c2 означает системный источник данных (а не пользовательский). Database=primer - имя базы данных в MYSQL

Проверка создания источника данных (вывод списка)

myodbc-installer -s -l

Результат:
primer - MySQL ODBC 8.2 Unicode Driver

Источник данных в ODBC коннекторе успешно создан. Теперь Источник данных ODBC доступен в рамках данной операционной системы данного ПК.

Радактирование /etc/odbc.ini

Если не задать параметр Socket=/var/run/mysqld/mysqld.sock будет выдаваться ошибка при подключении к коннектору БД
[MySQL][ODBC 5.3(a) Driver]Can't connect to local
MySQL server through socket '/tmp
mysql.sock' (2) ./connectivity/source/drivers/odbc/
OTools.cxx:357

Исправьте odbc.ini, добавив в него недостающие строчки.
Пример корректного файла с DSN для источника "primer":

odbc.ini не содержит без пароля

[primer]
DRIVER=MySQL ODBC 8.2 Unicode Driver
DATABASE=realty
NO_SCHEMA=1
PORT=3306
PWD=55555
SERVER=localhost
SOCKET=/var/run/mysqld/mysqld.sock
UID=root

odbc.ini с паролем в открытом виде

[primer]
DRIVER=MySQL ODBC 8.2 Unicode Driver
DATABASE=realty
NO_SCHEMA=1
PORT=3306
PWD=55555
SERVER=localhost
SOCKET=/var/run/mysqld/mysqld.sock
UID=root
PWD=11111

Разница между двумя вариантами, как не трудно догадаться - "с паролем" не нужно вводить имя пользователя и пароль при выборке данных из БД (несколько снижает безопасность).

Наличие строки SOCKET=/var/run/mysqld/mysqld.sock в /etc/odbc.ini обазательно!

2.2 Установка JDBC коннектора для MySQL

1) Нужно загрузить дистрибутив JDBC коннектора со страницы Connector/J
в виде DEB или RPM файла (в зависимости от ОС), для своего дистрибутива Linux:

Страница загрузки Connector/J:
https://dev.mysql.com/downloads/connector/j/

2) Устанавливаем DEB или RPM файл.

3. Создание базы данных LibreOffice Base и её подключение к MySQL

В любой программе LibreOffice вызовите пункт меню

  • Файл - Создать - База данных

На первом шаге "Добро пожаловать в Мастер баз данных LibreOffice" выбираем "Соединиться с существующей базой данных" - MySQL
шаг 1 - соединиться с существующей базой данных mysql

3.1 Вариант: с помощью ODBC коннектора

На втором шаге выбираем - при помощи odbc коннектора "Соединение через ODBC (Open Database Connectivity)":
шаг 2 - odbc

На следующем, третьем шаге Мастера, вводим имя или выбираем при помощи кнопки "Обзор..." имя DSN, ранее заданное для ODBC коннектора
шаг 3 - odbc выбор источника данных

На предпоследнем, четвертом шаге выполняем тестирование. Если имя пользователя и пароль сохранены в /etc/odbc.ini, вводить их не нужно.
step4-odbc-test

Если /etc/odbc.ini настроен корректно, ошибок не будет. В противном случае редактируем файл odbc.ini и выполняем тестирование снова.

Жмем кнопку "Готово!" внизу окна мастера и сохраняем БД в файл базы данных ODF в локальной папке пользователя.

Откроется база данных с внешними таблицами из MySQL. Таблицы можно открывать и смотреть данные:
open

Связь LibreOffice Base с MySQL создана и работает.

3.2 Подключение LibreOffice Base к MySQL с использованием JDBC

Класс JAR для MySQL устанавливается в папку /usr/share/java/ с именем mysql-connector-java-8.0.33.jar

Идём в LibreOffice Calc - Сервис - Параметры - Libreoffice - Расширенные возможности добавить путь к классу java.sql.driver: кнопка "Путь класса" - открываем в строке адреса корень Компьютера - указываем путь /usr/share/java/mysql-connector-java-8.0.33.jar

В (Tools - Options -LibreOffice - Advanced). Галочка "Использовать виртуальную машину Java" должна быть включена.

Создание базы данных в LibreOffice Base со связью через JDBC

Файл - Создать - Базу даных
Шаг 1 одинаков для ODBC и JDBC - "соединиться с существующей базой данных MySQL
шаг 1 - соединиться с существующей базой данных mysql

На шаге 2 выбираем JDBC:
шаг 2 - Соединение через JDBC - Java DataBase Connectivity

На шаге 3 нужно указать параметры: имя БД, сервера и порт MySQL:

  • primer
  • localhost
  • 3306

В поле "Имя класса" исправляем org.mariadb.jdbc.Driver на com.mysql.cj.jdbc.Driver

Внимание: указываемый в некоторых руководствах класс java.sql.Driver неправильный, используйте имя класса "com.mysql.cj.jdbc.Driver"

Нажимаем "Тест класса" - Драйвер успешно загружен.
jdbc3

На шаге 4 указываем имя пользователя, требуется пароль и нажимаем "Тест подключения"
jdbc-uspeh

Завершить с сохраняем БД LibreOffice в файл на жестком диске.

Если произойдет ошибка "Класс драйвера «java.sql.Driver» не может быть загружен. ./connectivity/source/drivers/jdbc/JConnection.cxx:685"
либо "'com.mysql.jdbc.driver' cannot be loaded".
Решение: сменить java на private build 1.8, перезапустить LibreOffice:
private
Имя класса на шаге 3, как указано выше должно быть com.mysql.cj.jdbc.Driver
и указан файл класса в Сервис - Параметры - Libreoffice - Расширенные возможности добавить путь к классу java.sql.driver: путь к mysql-connector-java-8.0.33.jar или mysql-connector-j-8.0.33.jar должен быть /usr/share/java/mysql-connector-java-8.0.33.jar или mysql-connector-j-8.0.33.jar

Примечание: Класс java в формате jar устанавливается при запуске DEB-файла коннектора, но его также можно скачать со страницы https://dev.mysql.com/downloads/connector/j/ - Platform independent - архив tat.gz в нём mysql-connector-j-8.0.33.jar извлекаем сначала в домашнюю папку без путей, затем перемещаем jar в /usr/share/java/.

Результат с JDBC

Результат отличается от варианта ODBC - видны все БД, в том числе системные (т.к. подключение с пользователем root). Игнорирование имени БД является недостатком по сравению с подключением через ODBC.

jdbc-result

Таблицы MySQL через JDBC также можно открывать в LibreOffice Base для просмотра или редактирования.
JDBC. Не забываем сохранить БД LibreOffice Base на диск в файл *.ODB.

Вывод

В статье рассмотрены два способа подключения из LibreOffice Base к базе данных MySQL - ODBC и JDBC. Оба способа рабочие.

Следующая статья



Похожие публикации