繁体   English   中英

C ++ SOCI查询自定义对象的向量

[英]C++ SOCI query into vector of custom Object

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

我有一个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*>但如果我尝试使用:

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

社会不是这样,或者我错过了什么? 我还发现OTL是库。 这可能是一个不错的选择吗? 正如我所说,我喜欢社会的方式。 OTL也可以这样吗?

SOCI不支持将ORM与批量操作相结合。 查看邮件列表线程: ORM与std :: vector不受支持?

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

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

AFAIR,它仍然应该得到支持。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM