gpt4 book ai didi

c++ - 如何使用 C++ 绑定(bind) libpq 中的 NULL 值?

转载 作者:行者123 更新时间:2023-12-05 07:23:35 26 4
gpt4 key购买 nike

我无法将 C++ 中的数字类型的 NULL 值与 libpq 库绑定(bind)。我用这个描述How to prepare statements and bind parameters in Postgresql for C++并且效果很好。

但我找不到如何为数字类型绑定(bind) NULL 值。

 pqxx::prepare::invocation& prep_dynamic(std::vector<std::string>& data, pqxx::prepare::invocation& inv) 
{
std::vector<std::string>::const_iterator it;
for(it=data.begin();it!=data.end();it++)
{
inv((*it));
}
return inv;
}





try
{
pqxx::connection C("dbname = postgres user = postgres password=postgres hostaddr = 127.0.0.1 port = 5432");
if (C.is_open())
{
std::string dbname = C.dbname();
DIAG(DETAILED_INFO, "Opened database successfully:[%s]", dbname.c_str());
}
else
{
DIAG(DETAILED_INFO, "Can't open database!");
}

work W(C);

C.prepare("example", "insert into ipls_troubleticketerrorreport (CUSTOMER, NETWORK,SELECTABLEMONTH, ERRORCODE,ERRORMESSAGE, TTID ) " \
"values ($1, $2, to_date($3,'YYYY-MM-DD'), $4, $5, $6);");


pqxx::prepare::invocation w_invocation = W.prepared("example");


std::vector< std::pair<std::string,std::string> > sqlParameters2;
sqlParameters2.push_back(std::pair<std::string, std::string>("CUSTOMER", ""));
sqlParameters2.push_back(std::pair<std::string, std::string>("NETWORK", ""));
sqlParameters2.push_back(std::pair<std::string, std::string>("SELECTABLEMONTH", ""));
sqlParameters2.push_back(std::pair<std::string, std::string>("ERRORCODE",""));
sqlParameters2.push_back(std::pair<std::string, std::string>("ERRORMESSAGE", ""));
sqlParameters2.push_back(std::pair<std::string, std::string>("TTID",""));


for (int i = 0; i < sqlParameters2.size(); i++)
{
std::string value = "";
value = i_get(sqlParameters2[i].first.c_str());
sqlParameters2[i].second = value;
}

std::vector<std::string > vect;

for(int i=0; i<sqlParameters2.size();i++)
{
vect.push_back(sqlParameters2[i].second);

}

prep_dynamic(vect, w_invocation);
pqxx::result r = w_invocation.exec();
W.commit();
C.disconnect ();
}
catch(const std::exception &e)
{
DIAG(DETAILED_INFO, "exception occured.[%s]",e.what());
throw e;


}

最佳答案

更改 vect 的类型作为std::vector<std::optional<std::string>> vect;并设置std::nullopt到要分配 null 的元素。就是这样。

关于c++ - 如何使用 C++ 绑定(bind) libpq 中的 NULL 值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55917576/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com