【问题标题】:POCO::PostgreSQL: How to add std::vector support to `Binder::bind`?POCO::PostgreSQL:如何将 std::vector 支持添加到`Binder::bind`?
【发布时间】:2020-07-15 09:17:01
【问题描述】:

我想把结构像

struct Person{
 int age;
 std::string name;
 std::vector<std::string> links;
};

到一个 psql 表中:

CREATE TABLE persons (
    age          integer,
    name         text,
    links        text[]
);

如何在 Poco::PostgreSQL 中添加 std::vector 支持?

看看绑定方法:

void Binder::bind(std::size_t /*pos*/, const std::vector<std::string>& /*val*/, Direction /*dir*/)
{
    throw NotImplementedException();
}

我知道用于自定义的 TypeHandler,但它只是将原始类型处理到您的类中,例如 int、std::string 等。

template <>
    class TypeHandler<struct CustomClass>
{}

【问题讨论】:

  • 您能否编辑您的问题以显示您将如何在 PostgreSQL 中存储此对象?它是一个包含三个字段的表和一个单独的links 表吗?是否可以将 links 存储为列分隔值或 JSON 列?
  • @Botje 不,这不是单独的表格。 links text[] 看起来像{"link1","link2"}。在单独表的情况下,任务变得简单
  • 这听起来像是 Poco 的缺陷,是的。恐怕您必须自己添加该功能。

标签: c++ postgresql poco-libraries


【解决方案1】:

这样做是这样的:

std::vector<Person> persons;
ses << "SELECT NAME FROM NAME", into(persons), now;

您应该阅读 Poco 数据用户指南,因为它包含大量信息并包含您的答案 here。它还告诉您一些不要做的事情,因此值得一读。

【讨论】:

    猜你喜欢
    • 2022-01-19
    • 2023-03-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-15
    • 1970-01-01
    • 1970-01-01
    • 2011-04-07
    相关资源
    最近更新 更多