gpt4 book ai didi

C++ SOCI 查询自定义对象的 vector

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:51:01 28 4
gpt4 key购买 nike

目前我正在编写一个 C++ 应用程序,我必须在其中连接到 SQLite 数据库。我搜索图书馆并找到 SOCI,我不得不说:我喜欢它。流语法和映射非常棒。但是我有一个问题:

我有一个 Event 类,我已经为它编写了解析器函数:

template<> struct type_conversion<Event>
{
typedef values base_type;

static void from_base(const values& v, indicator /* ind */, Event& event)
{
event.m_id = v.get<std::string>("id");
event.m_title = v.get<std::string>("Title");
event.m_description = v.get<std::string>("Description");
event.m_date = v.get<std::tm>("Date");
}

static void to_base(const Event& event, values& v, indicator& ind)
{
v.set("id", event.m_id);
v.set("Title", event.m_title);
v.set("Description", event.m_description);
v.set("Date", event.m_date);

ind = i_ok;
}
};

这非常适合这样的查询:

sql << "SELECT * FROM Event WHERE id=5", into(event); 

我想将大量事件选择到 std::vector<Event*> 中但如果我尝试这样做:

std::vector<Event*> events;
sql << "SELECT * FROM Event", into(events)

但是有了这个我得到了以下编译器错误:

No known convertation from
soci::details::conversion_into_type<std::vector<Event>> into
soci::details::into_type_base

使用 SOCI 是不可能的,还是我遗漏了什么?我还发现 OTL 作为图书馆。这可能是一个好的选择吗?正如我所说,我喜欢 SOCI 方式。 OTL 也可以实现类似的功能吗?

最佳答案

SOCI 不支持 ORM 与批量操作的组合。查看邮件列表主题:ORM with std::vector not supported? .

相反,您可以使用行集和基于迭代器的访问:

rowset<Event> rs = (sql.prepare << "SELECT * FROM Event");
for (auto it = rs.cbegin(); it != rs.cend(); ++it)
{
// access event
}

AFAIR,还是应该支持的。

关于C++ SOCI 查询自定义对象的 vector ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42260993/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com