gpt4 book ai didi

c++ - 使用 libpqxx 库插入 NULL/空字符串

转载 作者:搜寻专家 更新时间:2023-10-31 01:06:03 27 4
gpt4 key购买 nike

在下面的代码片段中,名为 mac 的 std::string 对象有时是一个空字符串(即“”),我希望准备好的语句自动将此变量视为 null。我想知道如何在下面的代码中实现这一点。在我的谷歌搜索尝试中,我碰巧发现有一种方法可以设置一个指示空值的标志,但我找不到具体的例子。你能提供一个例子来实现这个吗?谢谢。

try
{
mConnection->prepare("insertBulkData", mSqlInsertStmt);
pqxx::work xAction(*mConnection);

for(uint32_t i = 0; i < tList.size(); i++)
{
TCoreDTO* tCore = tList[i];
const std::string& mac = tCore->getMac();
const std::string& uuid = tCore->getUUID();
int coreNo = (int)tCore->getCoreNo();
xAction.prepared("insertBulkData")(mac)(uuid)(coreNo).exec();
}
xAction.commit();
}
catch(std::exception& pqExp)
{
//Error handling code
.....
}

插入语句如下:

std::string mSqlInsertStmt 
= "INSERT INTO T_CORES (MAC, UUID, CORE_NO) VALUES ($1, $2, $3)";

表结构如下:

CREATE TABLE IF NOT EXISTS T_CORES (
ID SERIAL PRIMARY KEY,
MAC TEXT,
UUID TEXT,
CORE_NO INT DEFAULT 0);

最佳答案

使用 libpqxx,您可以通过在不带参数的准备语句上调用 operator () 来发送空值,例如:

xAction.prepared("insertBulkData")()(uuid)(coreNo).exec();

将发送 NULL 作为语句的第一个参数。

我认为您无法让它自动将空字符串替换为 NULL。实现此目的的一种方法是修改您正在使用的 SQL:

INSERT INTO T_CORES (MAC, UUID, CORE_NO) VALUES (CASE WHEN $1='' THEN NULL ELSE $1 END, $2, $3)

关于c++ - 使用 libpqxx 库插入 NULL/空字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21574102/

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