MySQL Connector / C ++ ошибка

Всем добрый день! Пытаюсь запустить тестовое приложение в котором пытаюсь подключиться к БД c помощью MySQL Connector / C ++.

Но после подключения к базе и успешной выборки сталкиваюсь с неприятной и непонятной для меня ошибкой.

Возникает ошибка такого типа: Необработанное исключение по адресу 0x00007FF9C5B2F910 (ucrtbased.dll) в TestSql.exe: 0xC0000005: нарушение прав доступа при чтении по адресу 0xFFFFFFFFFFFFFFFF.

Как я понял ошибка вызывается вот этим методом res->getString("Region"). В таблице тип этого поля varchar(50). Если я пытаюсь выбрать ID методом res->getInt("id") То все отлично работает.

Но как ее исправить? Вот ссылка на скачивание базы которая используется для теста https://dev.mysql.com/doc/index-other.html

Вот код который я использую

#include <stdlib.h>
#include <iostream>
#include <string>
#include <mysql/jdbc.h>

using namespace std;

int main()
{


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

        // Create a connection 
        driver = get_driver_instance();

        con = driver->connect("tcp://127.0.0.1:3306", "root", "root");
        // Connect to the MySQL test database /
        con->setSchema("world");

        stmt = con->createStatement();
        res = stmt->executeQuery("SELECT Population, Name, Region FROM country");
       while (res->next()) {


           std::istream* retrievedFirstName = res->getBlob("Name");
           if (retrievedFirstName)
           {
               char pws[52];
               retrievedFirstName->getline(pws, 52);

               string name(pws);


               cout << res->getInt("Population") << " " << name << " " << res->getString("Region") << endl; // res->getString("Region") вызывает исключение

           }

        }
       delete res;
        delete stmt;
        delete con;

    }
    catch (sql::SQLException& e) {

    }

    return EXIT_SUCCESS;
}

Ответы (1 шт):

Автор решения: alexsis20102

Разобрался. getString не работает с типом поля varchar. Для выборки данных такого типа нужно использовать getBlob.

костыль выглядит как то так:

       res = stmt->executeQuery("SELECT id, name FROM users");
       while (res->next()) {


           std::istream* Name = res->getBlob("name");
           if (Name)
           {
               char pws[50];
               Name->getline(pws, 50);

               string name(pws);


               cout << res->getInt("id") << name << endl;

           }

        }
→ Ссылка