1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/cxxjava-CxxDBC

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.md

CxxDBC

Основывающийся на C++ разработанный межплатформенный посредник для подключения к разнородным базам данных.

Содержание:

Особенности:

  • унифицированный интерфейс, поддерживающий подключение и доступ к различным типам баз данных;

  • клиентский API на C++, основанный на jdbc, простой и удобный в использовании;

  • поддержка пула соединений в клиенте C++;

  • поддержка клиентом C++ следующих режимов подключения к базе данных: статическое связывание с прямым подключением к базе данных, динамическая загрузка с прямым подключением, доступ через прокси-сервер dbproxy, гибридный режим доступа и т. д.;

  • при использовании режима доступа через прокси-сервер dbproxy поддерживается чёрный и белый списки, безопасное соединение SSL, управление максимальным количеством подключений, запись SQL-запросов (SQL-аудит безопасности, разделение чтения и записи и другие расширенные функции находятся в стадии разработки);

  • список поддерживаемых языков программирования: | Язык | Поддержка | |----|----| | C++ | Да | | Другие | Задача |

  • Список поддерживаемых баз данных: | База данных | Чтение, запись | Много наборов результатов | Пакетная запись | Хранимые процедуры | LOB чтение и запись | Связывание параметров | Транзакции | Ограничения | |----------|------|---------|---------|--------|---------|-------|------|--------| | MySQL | Да | Да | Да | Да | Да | Да | Да | Хранимые процедуры возвращают только результаты набора | | PostgreSQL | Да | Да | Да | Да | Да | Да | Да | Хранимые процедуры возвращают только результаты набора | | Oracle | Да | Да | Да | Да | Да | Да | Да | Хранимые процедуры возвращают только курсоры | | MSSQL | Да | Да | Да | Да | Да | Да | Да | Хранимые процедуры возвращают только наборы результатов, не поддерживает режим привязки параметров | | Sybase | Да | Да | Да | Да | Да | Да | Да | Хранимые процедуры возвращают только наборы результатов, не поддерживает режим привязки параметров | | Другое | Задача | Задача | Задача | Задача | Задача | Задача | Задача | |

Пример:

#include "Edb.hh"
#include "ELog.hh"

#define LOG(fmt,...) ESystem::out->println(fmt, ##__VA_ARGS__)

#define HOST "127.0.0.1"
#define PORT "6633"
#define DATABASE "test"
#define USERNAME "test"
#define PASSWORD "password"

static void test_db_execute() {
    EConnection conn; //по умолчанию используется режим прокси
    conn.connect(DATABASE, HOST, atoi(PORT), USERNAME, PASSWORD);

    ECommonStatement stmt(&conn);
    EResultSet* rs;

    //0.
    try {
        stmt.setSql("DROP TABLE mysql000").execute();
    } catch (...) {
    }
    stmt.setSql("CREATE TABLE mysql000 ("
                "id integer NULL,"
                "name varchar (40) NULL ,"
                "date date NULL"
                ") type=InnoDB").execute();

    //1.
    stmt.setSql("insert into mysql000 values(?,?,?)")
            .bindInt(4)
            .bindString("1")
            .bindString("2017-07-08");
    for (int i = 0; i < 100; i++) {
        stmt.execute();
    }

    //2.
    stmt.setSql("select * from mysql000").execute();
    rs = stmt.getResultSet();
    EResultSetMetaData* rsm = rs->getMetaData();
    LOG(rsm->toString().c_str());
    while (rs->next()) {
        for (int i = 1; i <= rs->getMetaData()->getColumnCount(); i++) {
            LOG("%s:%s", rs->getMetaData()->getColumnLabel(i).c_str(), rs->isNull(i) ? "is null" : rs->getString(i).c_str());
        }
    }
    rs->close();

    conn.close();
}

int main(int argc, const char **argv) {
    // CxxJDK init.
    ESystem::init(argc, argv);
    // CxxLog4j init.
    ELoggerManager::init("log4e.properties");

    try {
        test_db_execute();
    }
    catch (ESQLException& e) {
        e.printStackTrace();
    }
    catch (...) {
        printf("catch all...\n");
    }

    ESystem::exit(0);

    return 0;
}

Дополнительные примеры: esql.cpp mssql.cpp mysql.cpp oracle.cpp postgres.cpp sybase.cpp

Архитектура:

  • Распространённые режимы работы без использования CxxDBC:

    arch0

  • Режим работы CxxDBC один: статическое связывание базы данных с прямым подключением

    arch1

  • Режим работы CxxDBC два: динамическая загрузка базы данных с прямым подключением

    arch2

  • Режим работы CxxDBC три: доступ через прокси dbproxy

    arch3

  • Режим работы CxxDBC четыре: гибридный режим доступа Объединяет режимы работы два и три. Схема не представлена.

Интеграция:

Подробности см. в руководстве по использованию

Зависимости:

  1. CxxJDK
  2. CxxLog4j
  3. CxxConet

Задачи:

  1. SQL аудит безопасности;
  2. ...

Поддержка:

Электронная почта: cxxjava@163.com

Комментарии ( 0 )

Вы можете оставить комментарий после Вход в систему

Введение

Промежуточное ПО для межплатформенного подключения к разнородным базам данных, разработанное на C++. Развернуть Свернуть
Apache-2.0
Отмена

Обновления

Пока нет обновлений

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://api.gitlife.ru/oschina-mirror/cxxjava-CxxDBC.git
git@api.gitlife.ru:oschina-mirror/cxxjava-CxxDBC.git
oschina-mirror
cxxjava-CxxDBC
cxxjava-CxxDBC
master