C soci查询到自定义对象的向量
C++ SOCI query into vector of custom Object
当前我正在编写一个C 应用程序,必须在其中连接到SQLITE数据库。我搜索图书馆并找到了社会,我不得不说:我喜欢它。流语法和映射真是太棒了。但是我有一个问题:
我有一个事件课,我为此写了解析器函数:
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作为库。这可能是一个不错的选择吗?正如我说的那样,我喜欢这种社会方式。OTL是否也可以使用类似的事情?
soci不支持ORM与批量操作的组合。请参阅邮件列表线程:带有std ::向量不支持的ORM?。
相反,您可以使用基于Rowset和Iterator的访问:
rowset<Event> rs = (sql.prepare << "SELECT * FROM Event");
for (auto it = rs.cbegin(); it != rs.cend(); ++it)
{
// access event
}
afair,仍然应该支持。
相关文章:
- 为什么我不能将一个对象push_back到属于另一个类的对象向量中?
- 从多个源构造一个对象,包括一个对象向量
- 如何从文件中读取两个字符串和数字数组,并将它们存储在对象向量中
- 对象 C++ 向量的 STL 容器
- 初始化C++中的对象向量
- 从自定义类获取对象向量中的 max 元素
- 如何在 c++ 中打印存档中的对象向量
- 如何将包含另一个对象向量的对象保存到文件中,并使用C++中的二进制文件从文件中读回?
- 尝试重载输出运算符时,我无法遍历对象向量
- 如何在C++中打印对象向量的内容
- 打印出对象向量中的每个元素C++
- 在 c++ 的构造函数中分配对象向量时出错
- 遍历对象向量,并找到与从文本文件中提取的对象匹配的变量
- 对象向量是否在堆或堆栈上分配C++?
- 基于不同字段的对象向量的排序功能
- 有没有一种简单的方法可以在对象向量上调用构造函数?
- 用rapidjson读取子对象向量
- 尝试使用比较运算符对对象向量进行排序
- 如何用对象向量重载 cin(>>)
- 如何将某个元素从shared_ptr擦除到对象向量?