Как я могу связать значение NULL с подготовленными операторами с помощью библиотеки libpq и C ++? - PullRequest
0 голосов
/ 15 мая 2019

Мне нужно использовать библиотеку libpq, а НЕ libpqxx, и я не смог выяснить, как связать значение NULL для числового типа в подготовленном выражении. Я попытался NULL или null или даже с "", но это не сработало.

...
std::string statements = "insert into ipls_troubleticketerrorreport2 (CUSTOMER, NETWORK,SELECTABLEMONTH, ERRORCODE,ERRORMESSAGE, TTID ) " \
                             "values ($1, $2, to_date($3,'DD.MM.YYYY'), $4, $5, $6);";
for (int i=0; i< sqlParametersWithValue.size();i++)
    {
        char NULLstr[] = "NULL";
        if ((sqlParametersWithValue[i].second) == "")
        {
            paramValues[i] = NULLstr;
        }
        else
        {       
            paramValues[i] = &(*(sqlParametersWithValue[i].second).c_str());
        }
    }




pgres =  PQexecParams(pgconn,statements.c_str(), sqlParametersWithValue.size() , NULL, paramValues, NULL, NULL, 0);

1 Ответ

0 голосов
/ 15 мая 2019

Вы передаете ему строку, содержащую «NULL», а не фактический нулевой указатель.

paramValues[i] = NULL;
paramValues[i] = nullptr; // If using C++

https://www.postgresql.org/docs/9.1/libpq-exec.html

paramValues[]
Определяет фактические значения параметров. Нулевой указатель в этом массиве означает, что соответствующий параметр равен нулю; в противном случае указатель указывает на текстовую строку с нулевым символом в конце (для текстового формата) или двоичные данные в формате, ожидаемом сервером (для двоичного формата).

...