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 шт):
Разобрался. 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;
}
}