libpqxx准备好的语句非空检查指针类型

问题描述

我是SQL整体和libpqxx的新手。我正在尝试构建一个基本应用程序,我只需要使用准备好的语句来执行非常简单的作业即可。 我已经从libpxx 4.0版本开始,并且实现了如下代码:

pqxx::work txn( *conn );
auto result = txn.prepared( "my_insert" )( x->getId( ),x->isIdSet( ) )( x->getUser( ),x->isUserSet( ) )(x->getCreatedAt( ),x->isCreatedAtSet( ) ).exec( );
txn.commit();

现在,我不得不更改为6.4版,并意识到不赞成使用预准备功能,而我应该使用exec_prepared函数。好的。但是我真的错过了“ nonnull”条件。出于某些原因,我使用了大量的指针,并且需要一种方便的方法将这些值传递给数据库API。我可以这样写:

auto result = txn.exec_prepared( "my_insert",(x->isIdSet() ? std::to_string(x-getId()) : "null"),....);

这在某些情况下可能有效,但是当我尝试将“ null”作为字符串插入smallint字段时,出现SQL错误(尽管这是合理的)。 由于类型不同,我不能使用?:运算符在true分支上返回string / int / etc ...,在false分支上返回nullptr。

我找不到有关该库的适当文档。他们有一个文档here,但是如果您想了解有关某个特定功能的更多信息,那么那里根本就没有任何内容。

老实说,即使弃用的.prepared(...)函数在我的6.4中也无法正常使用。我尝试使用txn.prepared("whatever")(y->z->getA(),y->z != nullptr).exec()格式,当y是有效的非null指针类型而z是null指针时,出现了分段错误。我希望该函数在检查条件之前不会触及该值,但显然并非如此。

我有一个带有8个参数的准备好的语句,其中6个是指针类型(shared_ptr),如果我不得不想出一个荒谬的解决方案来逐个检查所有参数,并且不得不写200行只是为了能够正确调用此函数。

有人在那里有适当的解决方案吗?正如我提到的,我是新手,所以我可能会错过其中的重要部分。请帮帮我^^

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)