仅当将函数应用于字段时,才从 sql 查询中获取结果.是Poco::D ata的错误吗?



我正在使用Poco::D ata(版本1.8.1(查询使用gcc版本7.3.0编译的sqlite数据库(版本3.27(以获取运行openwrt 18.06的洋葱omega2(mips(。
我有一个奇怪的行为。
当我执行这样的查询时

select <real field> from ...

我有一个"NotFound"异常(当然,从命令行查询会返回结果(。
例如,如果我对它应用一个像"avg"这样的函数,我就会得到正确的结果。
整数字段不会发生这种情况。字段名称是"psi":我认为它不是一个保留词。这是Poco::D ata的错误吗?是我做错了什么吗?

我使用的代码是:

double result;
std::string query = "select <field> from table where <condition on pk>";
session << query, into(result), now;

此代码提供 NotFound。

将字符串查询更改为:

std::string query = "select avg(<field>) from table where <condition on pk>";

它有效。

查询可能返回多个结果行。在这种情况下,如果result是标量值,into(result)将失败。尝试添加limit(0, 1),如下所示:

session << query, into(result), limit(1), now;

仅返回单个结果行。但是,这可能不是您想要的,因为您基本上会得到一个与您的查询匹配的随机结果行。如果你想要全部,你可以使用一个向量来接收结果,如:

std::vector<double> result;
session << query, into(result), now;

还有其他选项可用于获取多行结果,例如,通过多次执行语句或使用RecordSet来逐步遍历所有结果行。有关详细信息,请参阅绑定和记录集示例。

最新更新