代码之家  ›  专栏  ›  技术社区  ›  SagunKho

关闭游标错误MySQL连接器C++ 8

  •  0
  • SagunKho  · 技术社区  · 6 年前

    我使用的是MySQLconnector8.0,下面的代码在尝试获取行时抛出了一个闭合的光标错误。

            std::string query = "SELECT `id`, `username`, `password`, `gender`, `email`, `group_id`, `state`, `unban_time`, `expiration_time`, `last_login`, `last_ip`, `birth_date`, `character_slots`, `pincode`, `pincode_expiry` FROM `game_account` WHERE username = ?;";
    
            mysqlx::RowResult res = server->get_mysql_session().sql(query).bind(username).execute();
    
            try {
                mysqlx::Row record = res.fetchOne();
    

    错误:

    CDK Error: get_rows: Closed cursor
    
    1 回复  |  直到 6 年前
        1
  •  2
  •   Alan Birtles    6 年前

    server->get_mysql_session() 返回临时 Session 对象。所有临时文件在其创建声明的结尾处都会被销毁。

    因为在你打电话之前会话被破坏了 fetchOne 它失败了。

    例如,此代码:

    #include <iostream>
    #include <string>
    
    struct A
    {
        A() { std::cout << "A()\n"; }
        ~A() { std::cout << "~A()\n"; }
    };
    
    std::ostream& operator << (std::ostream& os, const A& a) { os << "\nA<<"; return os; }
    
    int main()
    {
        std::cout << "line1\n";
        std::cout << "line2" << A() << "\n";
        std::cout << "line3\n";
    }
    

    生成以下输出:

    line1
    A()
    line2
    A<<
    ~A()
    line3