sqlite - 仅当将函数应用于字段时才能从 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>";
有用。
解决方案
您的查询可能返回多个结果行。在这种情况下,如果是标量值,into(result)
则会失败。result
尝试添加一个limit(0, 1)
,如:
session << query, into(result), limit(1), now;
只返回一个结果行。但是,这可能不是您想要的,因为您基本上会得到一个与您的查询匹配的随机结果行。如果你想要全部,你可以使用一个向量来接收结果,如:
std::vector<double> result;
session << query, into(result), now;
还有其他获得多行结果的选项,例如通过多次执行语句或使用RecordSet
. 有关详细信息,请参阅Binding和RecordSet示例。
推荐阅读
- javascript - Github auth 在 jquery 上运行良好,但在 react.js 上不行
- sql - 如何在sql中获取平均时间
- python - 如何根据连续性拆分时间序列索引
- latex - 手动乳胶部分 IEEE 标准
- python - 使用美丽的汤打印反应文本
- azure - 如何通过控制台应用程序更新 Azure Devops 上的文件
- javascript - 如何清除 document.write()
- arrays - 如何在numpy的4D数组中更改通道内的顺序
- javascript - “this”引用如何绑定箭头符号?
- amazon-web-services - Boto3 使用现有资源创建堆栈