Utiliser le connecteur C++ pour la BdD MySQL

Dans l’article qui suit, nous allons installer le connecteur C++ pour la base de données MySQL (aussi bien sous GNU/Linux que sous Microsoft Windows). Puis nous présenterons quelques exemples d’applications en manipulant une base de test.

Prérequis

Pour commencer il faut se rendre sur le site officiel pour lire ce que propose MySQL concernant ce connecteur : https://dev.mysql.com/doc/connector-cpp/en/connector-cpp-introduction.html

J’ai déjà installé sur ma machine Linux/Debian un serveur MySQL ainsi que phpMyAdmin pour faciliter la gestion des bases. La base de test s’appelle ‘olivier_db’ et la table qui subira quelques unes de nos requêtes ‘animal’. Les champs de cette table sont présentés ci-dessous:

Un utilisateur ‘olivier’ a été créé avec le mot de passe ‘olivier’. Tous les droits lui sont donnés sur cette base et il pourra se connecter depuis n’importe quelle adresse IP. Elle contient au départ deux enregistrements :

Installation et premier test sous GNU/Linux Debian 10 Buster

On suppose qu’un compilateur C++ est installé (sinon faire la commande suivante: apt-get install build-essential). La version du compilateur est la 4.9.2. Pour installer notre connecteur C++ pour MySQL il suffit d’installer les paquets suivants :

libmysqlcppconn-dev – MySQL Connector for C++ (development files)
libmysqlcppconn7v5 – MySQL Connector for C++ (library)

Cela entraîne l’installation automatique des paquets suivants:
libboost-dev libboost1.67-dev

root@casimir:/home/olivier/Documents/# apt install libmysqlcppconn7v5 libmysqlcppconn-dev
Lecture des listes de paquets… Fait
Construction de l’arbre des dépendances
Lecture des informations d’état… Fait
Les paquets supplémentaires suivants seront installés :
libboost-dev libboost1.67-dev

Rien de spécial à dire. L’installation se passe rapidement. Testons alors un premier exemple en modifiant un code donné ici :

Le code précédent se compile avec la ligne ci-dessous, on exécute ensuite le programme:

L’exécution correspond bien a ce que l’on attend : deux enregistrements, l’affichage de la valeur de l’id et du nom pour chaque résultat.

Si on met une valeur erronée pour le mot de passe, on obtient à l’exécution le message ci-dessous. Les exceptions fonctionnent correctement.

Réalisons une insertion d’un enregistrement. Ci-dessous la partie de code modifié par rapport au code précédent. Attention il n’y a plus d’étape 5 :

Cette fois-ci la requête est dans une string. Pour réaliser une commande INSERT, UPDATE ou DELETE, il faut utiliser la méthode executeUpdate(). Pour la commande SELECT, la méthode executeQuery() car elle renvoie un type ResultSet* (voir cette discussion).

L’entier de retour (result) de la méthode executeUpdate() indique le nombre de lignes modifiées. Ci-dessous le résultat de trois exécution du code précédent:

Nous en avons terminé avec GNU/Linux. Passons à présent avec Microsoft Windows.

Installation et premier test sous Microsoft Windows

Il faut tout d’abord lire les recommandations d’Oracle sur l’installation sous Microsoft Windows ici. On en déduit que l’on va télécharger deux archives:

  • l’archive zip du connecteur c++ pour windows ( lien ), choisir comme système d’exploitation Microsoft Windows puis l’archive en version 32 bits
  • la bibliothèque boost en version zip ou mieux 7zip ( lien )

Je vous conseille très vivement d’installer 7Zip pour Windows sinon vous allez passer quelques heures à décompresser l’archive de boost…. Une fois ces deux archives décompressées sur votre disque dur (notez les chemins), il faut créer votre projet avec Microsoft Visual Studio (pour ma part VS2017).

  • Créer un nouveau projet Visual C++, Choisissez Win32 puis Application console Win32. Faire un projet vide (décochez en-tête précompilé puis cochez Projet vide)
  • TRÈS IMPORTANT: choisissez le mode ‘Realease’ lorsque vous ferez les ajouts des lignes suivantes. (Les tests en mode Debug ont échoué…)
  • Faites un clic droit sur votre projet dans la fenêtre explorateur de solutions. Sélectionnez Ajouter puis Élément existant… Cherchez dans votre répertoire ou vous avez désarchivé le connecteur c++, le fichier ‘mysqlcppconn.lib’ puis ajoutez-le
  • Faites un clic droit sur votre projet dans la fenêtre explorateur de solutions. Sélectionnez Propriétés puis Répertoire VC++ puis l’item ‘Répertoires Include’. Rajoutez alors deux chemins : un vers la librairie Boost (par exemple: c:\xxx\yyy\boost_1_64_0) et un vers la librairie mysql-connector (par exemple c:\xxx\zzz\mysql-connector-c++-noinstall-1.1.9-win32\include)

Nous allons utiliser exactement le même code que sous GNU/Linux, donc copier-collez le dans un nouveau fichier cpp de votre projet (pour moi, ça sera source.cpp). La seule modification de code est l’adresse ip dans la méthode connect() :

Compilez et exécutez le code. Si tout se passe bien vous obtiendrez la même sortie que l’exécutable sous GNU/Linux.

Si vous n’arrivez pas à vous connecter, il est possible que le serveur MySQL n’accepte pas les connexions distantes. Sous Debian 8 Jessie, éditez le fichier ‘/etc/mysql/my.cnf’ puis commentez (mettre un # devant la ligne) la ligne ‘bind-address=’ puis relancez le service MySQL.

Conclusion

Dans la mesure du possible, il faudra désormais utiliser cette bibliothèque dans les futurs codes de projets ou de TPs. Pour aller plus loin dans l’exploration de cette bibliothèque, il faut télécharger les sources car elles contiennent un répertoire ‘exemples’. La description des exemples est disponible ici.

Codes source à télécharger

codesSources
Titre: codesSources (1456 clics)
Légende:
Nom du fichier: codessources.zip
Taille: 2 Ko

5 réflexions sur « Utiliser le connecteur C++ pour la BdD MySQL »

  1. BOSSERT

    Bonjour super tuto, cependant j’aimerai savoir comment dans commande insert into … Values ( …, …, … ) je peut mettre des variable int ou float dans les champs?

  2. Fabien Chatenet

    Bonjour BOSSERT,
    Je me permet de te répondre,
    Comme tu as pu le voir les requêtes SQL sont envoyée sous forme de chaines de caractères :

    string req = « INSERT INTO Test VALUES(‘texte’,’18’,’23.048′) »;
    int result = stmt->executeUpdate(req);

    Il te suffit de composer une chaine de caractère en concaténant tes valeurs à celles-ci.
    La bibliothèque standard du C++ (STL) dispose d’outils performants pour ce genre de chose.
    Je penses notamment à std::ostringstream :

    #include
    std::string text = « texte »;
    int value1 = 18;
    float value2 = 23.048f;

    std::ostringstream req;
    req << "INSERT INTO Test VALUES('";
    req << text << "','";
    req << value1 << "','";
    req << value2 <executeUpdate(req.str());

    Le ostringstream se manipule comme un flux de sortie (std::cout) mais pointe sur un buffer de caractères et non sur le buffer de sortie standard.
    On récupère une std::string depuis ce flux via la fonction membre str()

    Bon courage !

  3. Fabien Chatenet

    Désolé pour les caractères manquant ou transformés dans mon messages précédent,
    ils ont dû se faire manger par les htmlspecialchars() et autres stripslashes() de php…
    Mais l’essentiel y est et je t’invite à lire la doc de la lib standard pour plus d’infos.

  4. LEO

    Salut,
    Merci pour le tuto.
    J’ai des problème au niveau de l’ajout de la librairie, ça ne fonctionne toujours pas
    Peut-tu m’aider?

  5. LEO

    PS: quand je compile, il a une fênetre avec l’erreur suivante  » Impossible d’exécuter le code, car mysqlcppconn-7-vs14.dll est introuvable. « 

Laisser un commentaire

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.