Закрытая ошибка курсора MySQL коннектор c ++ 8.0 - PullRequest
0 голосов
/ 15 января 2019

Я использую соединитель mysql 8.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 Ответ

0 голосов
/ 15 января 2019

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
...