MySQL C ++ не читает результаты - PullRequest
0 голосов
/ 17 января 2019

Я пытаюсь прочитать данные из базы данных, используя 8.0.13 MySQL C ++ Connector. Я не могу успешно записать в базу данных без проблем, но когда я пытаюсь получить результаты базы данных (используя следующий результат), она никогда не запускается.

bool outPutBool;
string outPut;

try {
    sql::Driver *driver;
    sql::Connection *con;
    sql::Statement *stmt;
    sql::ResultSet *res;

    string test = getTest();

    /* Create a connection */
    driver = get_driver_instance();
    con = driver->connect("tcp://ip:port", "root", "password");
    /* Connect to the MySQL test database */
    con->setSchema("database name");

    stmt = con->createStatement();
    res = stmt->executeQuery("SELECT `column name` FROM `table name` WHERE `test column` = '" + variable + "'"); //Variable is defined in the function input

    while (res->next()) {
        outPut = res->getString(1);

        cout << outPut << endl;

        cout << "Test\n"; //never runs
    }

    delete res;
    delete stmt;
    delete con;

}
catch (sql::SQLException &e) {
    cout << "# ERR: SQLException in " << __FILE__;
    cout << "(" << __FUNCTION__ << ") on line " << __LINE__ << endl;
    cout << "# ERR: " << e.what();
    cout << " (MySQL error code: " << e.getErrorCode();
    cout << ", SQLState: " << e.getSQLState() << " )" << endl;
}

Sleep(10000); //Temporary delay so I can see if anything comes up before it runs another function

if (test != outPut)
    doSomething();
else
    doSomethingElse();

Цикл while никогда не запускается, и я не понимаю, почему это происходит, поскольку, похоже, это работает для многих других людей. Я включил все библиотеки и заголовки в библиотеку соединителей, но не помогу.

Использование функции SQL Query в phpmyadmin правильно отображает вывод, поэтому это не ошибка запроса.

Я был бы очень признателен, если бы кто-нибудь мог мне здесь помочь, и если у вас есть какие-либо вопросы или вам нужно больше моего кода, просто спросите. Большое спасибо за помощь!

Ответы [ 2 ]

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

Когда вы объединяете оператор SQL динамически, а затем он не возвращает ожидаемых результатов, очень часто генерируемый оператор SQL не соответствует ожидаемому.

Трудно сказатьчто не так, потому что мы не можем воспроизвести это без вашей СУБД, конечно.Но обычно вы пишете оператор SQL в стандартный вывод, затем копируете его в интерактивную консоль SQL и смотрите, что происходит:

std::string query = "SELECT `column name` FROM `table name` WHERE `test column` = '" + variable + "'";
std::cout << query << std::endl;  // open console and copy/paste it to your DBMS 
res = stmt->executeQuery(query); //Variable is defined in the function input
0 голосов
/ 17 января 2019

Я не уверен, как, но после простого добавления оператора cout между запросом и циклом while он внезапно решил сам. Я удалил cout и теперь он работает без проблем. Не уверен, что вызвало эту ошибку, но я рад, что она решилась сама собой после того, как я пытался исправить это в течение долгого времени!

...