Версия: 0.1.0
Обновление: 2017/08/30
Данное руководство предназначено для IT-специалистов, имеющих знания в области C++ и реляционных баз данных.
Если вы также знакомы с основами JDBC, то интеграция приложения CxxDBC Client будет очень простой; если вы также хорошо знакомы с базовыми знаниями Linux, то интеграция приложения CxxDBC dbproxy mode будет очень простой (требуется развернуть сервер CxxDBC dbproxy).
CxxDBC -- # корневой каталог
|- apps # приложения, разработанные на основе client/dblib
|- esql # клиентский инструмент, подобный postgres psql
|- lite_dbproxy # упрощённая реализация сервера dbproxy
|- client # интегрированная библиотека доступа к базе данных
|- c # TODO
|- cpp # версия библиотеки C++
|- java # TODO
|- dblib # коллекция плагинов Native Devier для баз данных
|- plugins
|- freetds # доступ с открытым исходным кодом к Microsoft SQL Server и Sybase
|- mysql # реализация плагина MySQL
|- oracle # реализация плагина Oracle
|- postgres # реализация плагина Postgres
|- ... # TODO
|- interface # определение интерфейса между client и dblib
Здесь представлен обзор ключевых моментов использования уже реализованного API клиента C++ версии CxxDBC Client.
EConnection
Способ подключения:
edbc:[dbtype]://<host:port>/<database>?connectTimeout=<время ожидания соединения, единица измерения: секунды>&socketTimeout=<время ожидания операции с базой данных через сокет, единица измерения: секунды>&clientEncoding=<указать кодировку символов возвращаемых результатов, по умолчанию 'utf-8'>&username=<имя пользователя>&password=<пароль>&ssl=<true|false, является ли соединение безопасным через ssl, действует только в режиме proxy>
c++:
virtual void connect(const char *database,
const char *host,
const int port,
const char *username,
const char *password) THROWS(ESQLException);
Режим доступа:
Статическая компоновка: доступ к фиксированному типу базы данных, подробности см. в разделе «Инструкция по компиляции».
Динамическое прямое подключение: объект EConnection по умолчанию создаётся с использованием режима dbproxy. Конкретный режим определяется параметром конструктора boolean proxy. Когда proxy==false, client использует режим прямого подключения к базе данных, динамически загружая конкретный плагин dblib базы данных на основе dbtype. Например, если dbtype=='MYSQL', client автоматически загрузит MYSQL.so (MYSQL.dll в Windows).
Доступ через прокси: client обращается к базе данных через dbproxy, а dbproxy определяет, к какой базе данных подключаться, на основе client dbtype, аналогично процессу динамической загрузки в режиме динамического прямого подключения.
ECommonStatement
Универсальный объект Statement для доступа к базам данных, поддерживающий все операции SQL (аналогичен объединению функций execute, executeQuery и PreparedStatement в JDBC, более лаконичный API).
EUpdateStatement
Используется только для пакетного обновления SQL-операций, что повышает эффективность выполнения SQL.
EConnectionPool
Пул соединений с базой данных. Получить соединение из объекта EConnectionPool просто с помощью метода getConnection(). Объекты EConnection интеллектуально восстанавливаются после использования.
Здесь Apps относится к исполняемым программам, которые были скомпилированы для целевой платформы (x64), включая esql и lite_dbproxy.
tar zxvf apps/release/cxxdbc_apps_v0.1.0.tar.gz;
# следующие шаги выполняются только при необходимости включения плагина базы данных Oracle
cd [целевая платформа, linux или osx];
cd dblib;
tar zxvf oracle.tar.zg;
mv lib oracle;
После распаковки структура каталогов выглядит следующим образом:
apps -- # корневой каталог
|- certs # хранит SSL-сертификаты
|- linux # программы для платформы Linux
|- dblib # набор плагинов баз данных
|- dbproxy # основная программа службы dbproxy
|- dbproxy.ini # файл конфигурации службы dbproxy
|- log4e.properties # конфигурация журнала службы dbproxy
|- esql # клиентский инструмент типа psql
|- osx # программы для платформы OS X, структура подкаталогов такая же, как у Linux
esql: клиентский инструмент, похожий на psql, поддерживает режимы динамического прямого подключения и доступа через прокси.
Выполнение:
$ ./esql
==============================
| Name: esql, Version: 0.1.0 |
| Author: cxxjava@163.com |
| https://github.com/cxxjava |
==============================
Usage: ./esql [-c url]
./esql [-d] [-v] [?]
Options:
-c : [-c connect url]
-d : direct connection
-v : show version number
? : list available command line options
$
$ ./esql -c "edbc:ORACLE://localhost:6633/xe?username=oracle&password=password"
==============================
| Name: esql, Version: 0.1.0 |
| Author: cxxjava@163.com |
| https://github.com/cxxjava |
==============================
dbtype:ORACLE, version:Oracle Database 12c Standard Edition Release 12.1.0.2.0 - 64bit Production
1> select * from oracle001
2> go **Перевод текста на русский язык:**
Примечание:
lite_dbproxy — программа доступа к базе данных через прокси-сервер, то есть это серверная служба в режиме прокси-доступа.
Конфигурация:
Файл dbproxy.ini:
#Lite-DBProxy Config File
[COMMON]
max_connections = 100 # Максимальное количество подключений
socket_timeout = 3 # Время ожидания сокета (в секундах)
ssl_cert = "../certs/tests-cert.pem" # Сертификат SSL
ssl_key = "../certs/tests-key.pem" # Ключ SSL
[SERVICE]
listen_port = 6633 # Порт прослушивания
[SERVICE]
listen_port = 6643 # Порт прослушивания
ssl_active = TRUE # Включить SSL
#[WHITELIST]
# Белый список
# 127.0.0.1
[BLACKLIST]
# Чёрный список
192.168.0.199
[DBTYPE]
MYSQL=true # Поддержка базы данных MySQL: true (включено) | false (выключено)
PGSQL=true # Поддержка PostgreSQL: true (включено) | false (выключено)
ORACLE=true # Поддержка Oracle: true (включено) | false (выключено)
MSSQL=true # Поддержка MSSQL: true (включено) | false (выключено)
SYBASE=true # Поддержка Sybase: true (включено) | false (выключено)
[USERMAP]
postgres=db_postgres,password # Клиентский доступ к пользователю postgres: имя пользователя = db_postgres, пароль = password
mysql=db_mysql,password # Доступ к пользователю mysql: имя пользователя = db_mysql, пароль = password
oracle=db_oracle,password # Доступ к пользователю oracle: имя пользователя = db_oracle, пароль = password
mssql=db_mssql,password # Доступ к пользователю mssql: имя пользователя = db_mssql, пароль = password
sybase=db_sybase,password # Доступ к пользователю sybase: имя пользователя = db_sybase, пароль = password
[DBLIST]
db_postgres = "edbc:PGSQL://localhost:5432/postgres?connectTimeout=30&username=postgres&password=xxx" # Подключение к базе данных postgres
db_mysql = "edbc:MYSQL://localhost:3306/test?connectTimeout=30&username=test&password=xxx" # Подключение к базе данных mysql
db_oracle = "edbc:ORACLE://localhost:1521/xe?connectTimeout=30&username=system&password=xxx" # Подключение к базе данных oracle
db_mssql = "edbc:MSSQL://localhost:1433/master?connectTimeout=30&username=sa&password=xxx" # Подключение к базе данных mssql
db_sybase = "edbc:MSSQL://localhost:5000/master?connectTimeout=30&username=sa&password=xxx" # Подключение к базе данных sybase
Примечание:
1. Если вы включаете ssl_active = TRUE в [SERVICE], ssl_cert и ssl_key становятся обязательными.
2. Чтобы отключить белый список, удалите или закомментируйте весь раздел [WHITELIST]. В противном случае все клиенты будут отклонены.
3. После включения одного из типов баз данных (то есть [DBTYPE] имеет значение true в соответствующей позиции) все соответствующие ссылки в [DBLIST] для этого типа базы данных будут активированы.
4. В режиме прокси-доступа клиентские имена пользователей и пароли CxxDBC должны быть заменены именами пользователей и паролями, указанными в [USERMAP], а не исходными именами пользователей и паролями базы данных.
Файл **log4e.properties**:
log4j.rootLogger=TRACE, file # Уровень журнала: TRACE, файл log.path = /tmp # Путь к файлу журнала
log4j.appender.file = org.apache.log4j.RollingFileAppender # Приложение для записи в файл log4j.appender.file.File = ${log.path}/all.log # Файл журнала log4j.appender.file.BufferedIO = false # Буферизация ввода-вывода log4j.appender.file.BufferSize = 8192 # Размер буфера log4j.appender.file.MaxFileSize = 5MB # Максимальный размер файла log4j.appender.file.MaxBackupIndex = 1 # Количество резервных копий log4j.appender.file.layout = org.apache.log4j.PatternLayout # Шаблон макета log4j.appender.file.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [ %l:%c:%t:%r ] - [ %p ] %X{} %m %T %n # Формат вывода
Примечание: Для получения дополнительной информации о конфигурации см. java-версию log4j.properties.
Выполнение:
$ ./dbproxy
Usage: dbproxy -c [config file]
+d : daemon mode
+c : show cofing sample
+h : show help
+v : show version
$
$ ./dbproxy -c dbproxy.ini
virtual database connecting test...
virtual database [db_oracle] connect success.
listen port: 6633
listen port: 6643
Примечание:
Компиляция:
/**
* 功能:edb client 编译模式开关
* 说明:1-静态链接 | 0-其他模式
*/
#define EDB_CLIENT_STATIC 1
Одновременно добавьте код клиента и соответствующий код базы данных в плагин в основной проект приложения. Например, для статической компоновки плагина mysql добавьте следующие файлы или каталоги в проект приложения:
client/cpp/config.hh client/cpp/Edb.hh client/cpp/src/... dblib/inc/EDatabase.hh dblib/src/EDatabase.cpp dblib/plugins/mysql/EDatabase_mysql.cpp dblib/plugins/mysql/EDatabase_mysql.hh dblib/plugins/mysql/connector/
Обратите внимание, что библиотека коннектора mysql (dblib/plugins/mysql/connector/lib/libmysqlclient.a) должна быть предварительно скомпилирована самостоятельно.
/**
* 功能:edb client 编译模式开关
* 说明:1-静态链接 | 0-其他模式,其他模式即为动态直连和代理访问这两种模式,或两种模式的混合。
*/
#define EDB_CLIENT_STATIC 0
Добавьте только код клиента в проект приложения:
client/cpp/config.hh client/cpp/Edb.hh client/cpp/src/...
Другие примечания:
Характеристики кроссплатформенности CxxDBC зависят от характеристик кроссплатформенности исходного клиентского кода библиотеки базы данных, но в большинстве случаев можно найти соответствующую библиотеку для операционной системы на веб-сайте. Среди них:
freetds: http://www.freetds.org/
mysql: https://dev.mysql.com/downloads/connector/c/6.1.html
oracle: http://www.oracle.com/technetwork/database/features/instant-client/index-097480.html
postgres: https://www.postgresql.org/ftp/source/
FAQ: TODO.
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Опубликовать ( 0 )