#include #include MYSQL *connection; MYSQL_RES *queryresult[3]; // SP should return 3 resultsets char query[100]; int retval; int main() { connection = mysql_init(NULL); if (connection == NULL) { std::cout << "Failed to get connection handler\n"; exit(1); } mysql_real_connect(connection, "localhost", //hostname "root", //username NULL, //password "world", //database 0, //port NULL, //socket name CLIENT_MULTI_STATEMENTS); // Auto sets multi_results if (connection == NULL) { std::cout << "Failed to connect to DB\n"; } else { // Using 'query' as set up in Version 2 below works, Version 1 with // the stored procedure 1 does not, the do-while loop fails to terminate // resulting in a Segmentation fault // Version 1 - Call a stored procedure sprintf(query, "call getColour()"); // Version 2 - The stored procedure SQL reproduced // sprintf(query, "select * from Coins; \ // select * from Coins where Value > 20;\ // select 0"); retval = mysql_real_query(connection, query, strlen(query)); if (retval != 0) { std::cout << "Error calling stored procedure\n"; std::cout << mysql_error(connection) << "\n"; } else { std::cout << "Stored Procedure called successfully\n"; int i = 0; do { queryresult[i] = mysql_use_result(connection); if (queryresult[i] == NULL) { std::cout << "Null resultset\n"; } else { std::cout << "Result set " << i << " read\n"; mysql_free_result(queryresult[i]); i++; } } while(!mysql_next_result(connection)); std::cout << "Retval=" << retval << ", resultsets= " << i << "\n"; if (retval < 0) { std::cout << "Error occured while retrieving resultsets\n"; } } } mysql_close(connection); }