C++ et MySQL

J’ai besoin de me connecter à une base MySQL (hébergée en local) depuis un programme en C++, depuis Ubuntu. J’ai jamais vraiment oser tenter l’expérience car il me semblait que c’était compliqué. Une fois les bonnes informations trouvées ce n’est en fait pas trop difficile.

Installation des librairies

Sous Ubuntu et dérivés, il suffit de faire:

sudo apt-get install libmysqlcppconn7 libmysqlcppconn-dev

Sous Fedora, les choses sont un peu plus compliquées.
Pour commencer, il faut installer MySQL et la librairie Boost. Chez moi, cela donnait cela:

sudo dnf install mysql-community-devel-5.6.26-1.fc22.x86_64 
sudo dnf install boost-devel-1.57.0-6.fc22.x86_64 

Ensuite, on peut télécharger les sources du connector ici: http://dev.mysql.com/downloads/connector/cpp/

Finalement, décompresser l’archive et ouvrir un terminal dans le bon dossier, puis:

cmake .
make
sudo make install

Utilisation

Voici un exemple de base qui permet la connexion:

#include <iostream>

#include "mysql_driver.h"

#include <cppconn/driver.h>
#include <cppconn/exception.h>
#include <cppconn/resultset.h>
#include <cppconn/statement.h>
#include <cppconn/prepared_statement.h>

using namespace std;
using namespace sql::mysql;

int main() 
{
	sql::mysql::MySQL_Driver *driver;
	sql::Connection *con;
	
	try {     
		driver = sql::mysql::get_driver_instance( );
		con = driver->connect("tcp://127.0.0.1:3306", "user", "password");
	}
	catch (sql::SQLException &e) 
	{
		cout << "# ERR: SQLException in " << __FILE__;
		cout << "(" << __FUNCTION__ << ") on line " << __LINE__ << endl;
		/* Use what() (derived from std::runtime_error) to fetch the error message */
		cout << "# ERR: " << e.what();
		cout << " (MySQL error code: " << e.getErrorCode();
		cout << ", SQLState: " << e.getSQLState() << " )" << endl;

		return EXIT_FAILURE;
	}
	
	return 0;
}

L’étape la plus délicate est l’ajout de la librairie au moment du linkage. Si vous compilez en ligne de commande via « g++ », un simple ajout de l’option suivant suffit:

-L/usr/lib -lmysqlcppconn

Dans mon cas, j’essayais de compiler un projet nommé « temp » via CMAKE. Il suffit alors d’ouvrir le fichier CMakeLists.txt et d’ajouter:

find_library(MySQLCONN_LIBRARY mysqlcppconn)
target_link_libraries(temp ${MySQLCONN_LIBRARY})

(en remplaçant temp par le nom de votre projet).

On trouve quelques exemples là: http://dev.mysql.com/doc/connector-cpp/en/connector-cpp-getting-started-examples.html

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *