У меня проблема с областями видимости результатов выполнения запроса соединителя C ++ mysql.
В приведенном ниже коде результат ResultSet *
передается из другой функции, первоначально NULL
; однако после выполнения строки result = statement->executeQuery( query )
результат больше не будет NULL
.
Также из таблицы не выводятся ошибки.
Проблема возникает при возврате из этой функции. Результат ResultSet *
переходит от не NULL
к равенству NULL
.
Ясно, что есть некоторая форма определения объема результатов SQL-запросов. Возможно, их функция возвращает ссылку на локальную переменную (на самом деле иначе не уверен)?
Как мне обойти эту проблему с ограничениями, чтобы классы / функции, вызывающие эту функцию, могли обращаться с результатами по своему усмотрению и уменьшить необходимость написания группы специализированных функций в этой оболочке? Кроме того, копии должны быть сведены к минимуму - следовательно, использование указателей.
bool MySQLConnector::ExecuteQuery( std::string query, sql::ResultSet * result )
{
//connection is a member variable and has been initialized
sql::Statement * statement = connection->createStatement();
try
{
result = statement->executeQuery( query );
}
catch( sql::SQLException &e )
{
//handle errors
}
delete statement;
if( result == NULL )
{
printf( "Result is null File: %s Line %i\n", __FILE__, __LINE__ );
return false;
}
else
{
printf("Result is not null File: %s Line %i\n", __FILE__, __LINE__ );
}
return true;
}
Если у меня есть функция foo
, которая вызывает вышеуказанную функцию с правильными параметрами. printf
о том, что результат не равен нулю, будет напечатан, но в foo
, сразу после выполнения ExecuteQuery
, указатель, переданный в функцию, станет NULL
.