首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用SOCI和soci::indicators从表中获取行[C++]

使用SOCI和soci::indicators从表中获取行[C++]
EN

Stack Overflow用户
提问于 2013-01-20 19:31:01
回答 2查看 1.1K关注 0票数 0

我想从我的表'person‘中获取行。我想在指示器的帮助下做这件事,以避免当这个人没有名字时出现异常。该怎么做呢?

我写了代码:

代码语言:javascript
复制
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";
    }
}
}

但它没有显示任何行,仅当我添加一行时才显示:

代码语言:javascript
复制
std::cout << r.get<std::string>(0) << "\n";

在if语句之前,只有在那时我才能看到数据库中的名字。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-04-26 16:37:12

我认为您需要使用std::string而不是soci::row

代码语言:javascript
复制
//...
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;
//...
票数 1
EN

Stack Overflow用户

发布于 2016-06-24 19:42:26

如果要查询整个数据库表行,则只能使用soci::行。因为您只查询列'firstname‘,所以可以直接将其提取到一个字符串中。所以你的代码应该是这样的;

代码语言:javascript
复制
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;
        }
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14424043

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档