首页 > 解决方案 > 仅当将函数应用于字段时才能从 sql 查询中获取结果。它是 Poco::Data 的错误吗?

问题描述

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

select <real field> from ...

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

我正在使用的代码是:

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>";

有用。

标签: sqlitepoco-libraries

解决方案


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

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

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

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

还有其他获得多行结果的选项,例如通过多次执行语句或使用RecordSet. 有关详细信息,请参阅BindingRecordSet示例。


推荐阅读