学灬而无涯 2018-09-01 01:45 采纳率: 100%
浏览 1005
已采纳

c++ 驱动操作 Mongodb 查询超时异常如何捕获?

代码如下:

 try
    {
        mongo::DBClientConnection * conn = new DBClientConnection(true, 0, 3);
        if(!conn->isFailed())
        {
            cout<<"-false"<<" type:"<< conn->type()<<endl; 
        }
        else
            cout<<"-true"<<" type:"<< conn->type()<<endl; 
        //初始化连接
        MongoDB_Connect(&conn);

        if(conn->isFailed())
        {
            cout<<"1:连接失败!"<<" type:"<< conn->type()<<endl; 
        }
        else
            cout<<"2:连接成功!"<< conn->toString()<<" type:"<< conn->type()<<endl; 
        BSONArrayBuilder c;
        BSONObjBuilder add,A,B;
        int falg = 401;
        B.append("trans_sub_typecode",falg);
        B.append("discouant_money","0");
        B.append("account_money","0");
        B.append("proxy_money","0");
        c.append("0");
        c.append("0.00");
        B.append("trans_amount",BSON("$nin"<<c.arr()));
        auto_ptr<DBClientCursor> cursor;
        Query query(B.obj());
        try
        {
            cursor = conn->query("e_invoice.issue_park_transactions",query);

        }
        catch (mongo::AssertionException &e1)
        {
            printf("0:捕获异常: %s\n", e1.what());
        }
        catch (mongo::SocketException &e1)
        {
            printf("1:捕获异常: %s\n", e1.what());
        }
        catch (mongo::DBException &e1)
        {
            printf("2:捕获异常: %s\n", e1.what());
        }
        catch (mongo::exception &e1)
        {
            printf("02:捕获异常: %s\n", e1.what());
        }
        catch (...)
        {
            printf("查询失败 数据库数据异常\n");
        }
        if(cursor.get() == NULL)
        {
            cout<<"--返回为NULL:"<< conn->type()<<endl;  
        }

        if(conn->isFailed())
        {
            cout<<"2:连接失败!"<<" type:"<< conn->type()<<endl; 
        }
        else
            cout<<"2:连接成功!"<< conn->toString()<<" type:"<< conn->type()<<endl; 
    }
    catch (mongo::SocketException &e1)
    {
        printf("3:捕获异常: %s\n", e1.what());
    }
    catch (mongo::DBException &e1)
    {
        printf("3:捕获异常: %s\n", e1.what());
    }
    catch (...)
    {
        printf("3:查询失败 数据库数据异常\n");
    }

执行结果:
图片说明

我想要获取这段异常,有人有了解么?

  • 写回答

1条回答 默认 最新

  • knold 2018-09-01 13:50
    关注

    代码第4行 if( ! conn->isFailed()) 应去掉'!', 即改为:
    if( conn->isFailed())
    这样与执行结果图中第一处红线在逻辑上匹配。

    另外try...catch用法可以深入了解下,
    可参考https://www.cnblogs.com/MrYuan/p/4800257.html
    祝好运!

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 已采纳回答 7月15日

悬赏问题

  • ¥15 乌班图ip地址配置及远程SSH
  • ¥15 怎么让点阵屏显示静态爱心,用keiluVision5写出让点阵屏显示静态爱心的代码,越快越好
  • ¥15 PSPICE制作一个加法器
  • ¥15 javaweb项目无法正常跳转
  • ¥15 VMBox虚拟机无法访问
  • ¥15 skd显示找不到头文件
  • ¥15 机器视觉中图片中长度与真实长度的关系
  • ¥15 fastreport table 怎么只让每页的最下面和最顶部有横线
  • ¥15 java 的protected权限 ,问题在注释里
  • ¥15 这个是哪里有问题啊?