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 8 Jessie

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)
libmysqlcppconn7 – MySQL Connector for C++ (library)

Cela entraine l’installation automatique des paquets suivants:
libboost-dev libboost1.55-dev

root@casimir:/home/olivier/Documents/# apt-get install libmysqlcppconn7 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.55-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 execute 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)
  • TRES 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 Elé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, ca 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 (112 clics)
Légende:
Nom du fichier: codessources.zip
Taille: 2 KB

2 réflexions au sujet de « Utiliser le connecteur C++ pour la BdD MySQL »

  1. Rat2ordi

    Salut,

    Ton document est pas trop mal.

    Pour l’affichage de donnée c’est parfaite,

    mais impossible de rajouter des donnée dans la BDD avec.. :/

  2. Olivier Auteur de l’article

    Bonjour, je viens de revérifier la requete INSERT et relancer un code d’insertion : ca fonctionne. Assurez-vous d’avoir bien le droit de modifier la base sur laquelle vous vous connectez.

Laisser un commentaire

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