在下面的代码片段中,名为mac的std :: string对象有时是一个空字符串(即“”),我希望预处理语句将此变量自动视为null。我想知道如何在下面的代码中实现这一点。在我的谷歌搜索尝试中,我碰巧发现有一种方法来设置一个指示空值的标志,但我找不到具体的例子。能否请您举一个例子来实现这一目标?日Thnx。
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
.....
}
Insert语句如下:
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);
答案 0 :(得分:4)
使用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)
答案 1 :(得分:0)
快速决定...... 添加一个参数,指示何时插入NULL字段
xAction.prepared("insertBulkData")(mac,!mac.empty())(uuid)(coreNo).exec();
链接到doc