我想从我的表'person‘中获取行。我想在指示器的帮助下做这件事,以避免当这个人没有名字时出现异常。该怎么做呢?
我写了代码:
try
{
soci::statement st = (sql.prepare << "SELECT firstname FROM person;", soci::into(r, ind));
st.execute();
while (st.fetch())
{
if(sql.got_data())
{
switch(ind)
{
case soci::i_ok:
std::cout << r.get<std::string>(0) << "\n";
break;
case soci::i_null:
std::cout << "Person has no firstname!\n";
break;
}
}else
{
std::cout << "There's no such person!\n";
}
}
}但它没有显示任何行,仅当我添加一行时才显示:
std::cout << r.get<std::string>(0) << "\n";在if语句之前,只有在那时我才能看到数据库中的名字。
发布于 2013-04-26 16:37:12
我认为您需要使用std::string而不是soci::row
//...
std::string firstname;
soci::statement st = (sql.prepare << "SELECT firstname FROM person;"
, soci::into(firstname, ind));
//...
case soci::i_ok:
std::cout << firstname << std::endl;
break;
//...发布于 2016-06-24 19:42:26
如果要查询整个数据库表行,则只能使用soci::行。因为您只查询列'firstname‘,所以可以直接将其提取到一个字符串中。所以你的代码应该是这样的;
soci::indicator ind;
std::string sFirstName;
try
{
soci::statement st = (sql.prepare << "SELECT firstname FROM person;",
soci::into(sFirstName, ind));
st.execute();
while (st.fetch())
{
switch(ind)
{
case soci::i_ok: {
std::cout << sFirstName << std::endl;
break; }
case soci::i_null: {
std::cout << "Person has no first name!" << std::endl;
break;
}
}
}https://stackoverflow.com/questions/14424043
复制相似问题