Перейти к содержанию

PQXX

Вступление

Я всем своим ученикам рекомендую использовать opensource пакетный менеджер vcpkg. Потому что он использует только cmake и позволяет просто и быстро подключить новую библиотеку к проекту. Этот пакетный менеджер просто скачивает с гитхаба исходники (или другого открытого ресурса), собирает и раскладывает по своим папочкам однообразно, не зависимо от вида библиотеки.

Установка vcpkg

  1. Открываем консоль, например на диске C.
  2. Далее в ней по комментариям:
    ::Комментарии можно не печатать
    ::Получаем vcpkg из гитхаба
    
    git clone https://github.com/microsoft/vcpkg
    
    ::Переходим в скачанный каталог
    cd vcpkg
    
    ::Посмотрим на содержимое директории
    dir /D
    
    ::создаём утилиту vcpkg.exe под нашу систему и компилятор
    bootstrap-vcpkg.bat
    
    ::устанавливаем pqxx для x64
    ::Придётся подождать первый раз, нужны дополнительные утилиты
    vcpkg.exe install libpqxx:x64-windows
    
    ::Готово, теперь можно подключать к проекту
    

Проект для работы с БД

Создайте каталог, в котором будете работать с БД. В нём располагаются следующие файлы:

demo-pqxx\
   main.cpp
   CMakeLists.txt
   generate.bat

Скопируйте содержимое в них через текстовый редактор.

📃CMakeLists.txt:

cmake_minimum_required(VERSION 3.11) 
project(test_sql) 
set(CMAKE_CXX_STANDARD 20) 
find_package(PostgreSQL REQUIRED) 
find_package(libpqxx CONFIG REQUIRED) 
add_executable(${PROJECT_NAME} main.cpp) 
target_link_libraries(${PROJECT_NAME} PRIVATE PostgreSQL::PostgreSQL libpqxx::pqxx) 

📃main.cpp:

#include <iostream>
#include <pqxx/pqxx>

int main()
{
    try {
        pqxx::connection c(
            "host=localhost " //обязательно пробел
            "port=5432 " //стандартный порт psql
            "dbname=postgres " //своё имя базы
            "user=postgres " //своё имя пользователя
            "password=11111");    //свой пароль
        std::cout << "Connection OK\n";

        //как на слайде 33 выполнение insert запроса
        pqxx::work tx{ c };
        tx.exec("CREATE TABLE demo( id SERIAL PRIMARY KEY, field text NULL);");
        tx.commit();

        std::cout << "Create table ok";
    }
    catch (pqxx::sql_error e)
    {
        std::cout << e.what() << std::endl;
    }
    catch (std::exception e)
    {
        std::cout << e.what() << std::endl;
    }
}

📃 generate.bat:

call "C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Auxiliary\Build\vcvars64.bat" 
cmake -G "Visual Studio 17 2022" -A "x64" -DCMAKE_TOOLCHAIN_FILE=C:\vcpkg\scripts\buildsystems\vcpkg.cmake -Bbuild . 
PAUSE

Скриншот - выглядит у вас примерно так:

Пояснения:

  • main.cpp - исходник, в котором путь до библиотеки в угловых скобках, компилятор должен найти в системных каталогах при сборке.
  • CMakeLists.txt - в нём указываются find_package и target_link_libraries как подсказке после удачной установки либы в vcpkg
  • generate.bat - командный файл, который генерирует решение для visual studio внутри каталога build. Его надо править, если у вас другая версия студии или vcpkg поместили в другие место. Как раз он создаёт связь для проектников студии с либами vcpkg.

Сборка и запуск

  1. Запускаем батник, проверяем что успешно отработал и появился каталог build с sln внутри. Лог успешной отработки и содержимое каталога build:

  2. Открываем test_sql.sln в студии и назначаем активным проектом test_sql:

    Правой кнопкой, назначить активным проектом, проверяем, стал жирный.

  3. Собираем проект, проверяем лог сборки. Так выглядит успешный лог
  4. Работаем в студии, либо можно запускать из каталог debug, там должна быть экзешка с dll

В дальнейшем таким способом можете пробовать ставить Wt-библиотеки. Также посмотрите скринкаст с установки Catch2