Accéder à une base de données MariaDB en langage C
Documentation : MariaDB Connector/C API Functions
Prenons pour sujet d'étude la base meubleFournisseur qui a été créée dans
l'article Requêtes SQL. Le serveur MariaDB
a été installé et un utilisateur créé dans
l'article : Installer et utiliser un serveur MariaDB
.
Installer le connecteur C - MariaDB
doe@debian:~$ su - root Mot de passe : root@debian:~# apt-get install libmariadbd-dev
Effectuer des requêtes sur la base
Insertion
Programme source
/* * nom : insertEnCMysql.c * compilation : suivant les installations * gcc -o insertEnCMysql `mysql_config --cflags --libs` insertEnCMysql.c * OU * gcc -o insertEnCMysql `mariadb_config --cflags --libs` insertEnCMysql.c */ #include <stdio.h> // pour fprintf() #include <string.h> //pour strlen() #include <mysql.h> #define HOTE "localhost" #define NOM_BASE "meubleFournisseur" #define USER "adminBaseMeuble" #define PASSWORD "bonjour" int main() { MYSQL *pMysql; char requeteSql[] = "INSERT INTO fournisseur (fou_nom, fou_ville) VALUES ('G Meubles','Arpajon')"; /* Initialiser la structure MySQL */ if ((pMysql = mysql_init(NULL)) == NULL) {fprintf(stderr, "mysql_init(): %s\n", mysql_error(pMysql)); return -1;} /* Se connecter a base de donnees */ if (mysql_real_connect(pMysql, HOTE, USER, PASSWORD, NOM_BASE, 0, NULL, 0) == NULL) {fprintf(stderr, "mysql_real_connect(): %s\n", mysql_error(pMysql)); mysql_close(pMysql); return -1;} /* Executer la requete : inserer un element */ if (mysql_real_query(pMysql,requeteSql,strlen(requeteSql)) != 0) {fprintf(stderr, "mysql_real_query(): %s\n", mysql_error(pMysql)); mysql_close(pMysql); return -1;} /* Fermer la connexion a la base */ mysql_close(pMysql); return 0; }
Compilation
Pour pouvoir compiler, il est nécessaire d'utiliser les fichiers
d'en-tête .h
et la librairie lib*.so
de la bibliothèque MySQL
.
La commande mysql_config --cflags --libs
fournit les informations nécessaires à la compilation.
Remarque : il peut être nécessaire de remplacer mysql_config
par mariadb_config
doe@debian:~$ gcc -o insertEnCMysql `mysql_config --cflags --libs` insertEnCMysql.c
Exécution
doe@debian:~$ ./insertEnCMysql
Vérification
doe@debian:~$ mysql -u adminBaseMeuble -p meubleFournisseur Enter password: mysql> select * from fournisseur; +--------+-----------+-----------+ | fou_id | fou_nom | fou_ville | +--------+-----------+-----------+ | 1 | G Meubles | Arpajon | +--------+-----------+-----------+
Projection
Programme source
/* * nom : selectEnCMysql.c * compilation : suivant les installations * gcc -o selectEnCMysql `mysql_config --cflags --libs` selectEnCMysql.c * OU * gcc -o selectEnCMysql `mariadb_config --cflags --libs` selectEnCMysql.c */ #include <stdio.h> // pour fprintf() #include <string.h> //pour strlen() #include <mysql.h> #define HOTE "localhost" #define NOM_BASE "meubleFournisseur" #define USER "adminBaseMeuble" #define PASSWORD "bonjour" int main() { MYSQL *pMysql; MYSQL_RES *result; MYSQL_ROW row; unsigned int numRows; char requeteSql[] = "SELECT fou_nom, fou_ville FROM fournisseur;"; // Initialiser la structure MySQL if ((pMysql = mysql_init(NULL)) == NULL) {fprintf(stderr, "mysql_init(): %s\n", mysql_error(pMysql)); return -1;} // Se connecter a base de donnees if (mysql_real_connect(pMysql, HOTE, USER, PASSWORD, NOM_BASE, 0, NULL, 0) == NULL) {fprintf(stderr, "mysql_real_connect(): %s\n", mysql_error(pMysql)); mysql_close(pMysql); return -1;} // Executer la requete : afficher if (mysql_real_query(pMysql,requeteSql,strlen(requeteSql)) != 0) {fprintf(stderr, "mysql_real_query(): %s\n", mysql_error(pMysql)); mysql_close(pMysql); return -1;} result = mysql_store_result(pMysql); if (result) { // there are rows // Traiter les resultats while ((row = mysql_fetch_row(result))) { printf("fou_nom : %s, fou_ville : %s\n", row[0], row[1], row[2]); } // Liberer les resultats mysql_free_result(result); } // Fermer la connexion a la base mysql_close(pMysql); return 0; }
Compilation
doe@debian:~$ gcc -o selectEnCMysql `mysql_config --cflags --libs` selectEnCMysql.c
Remarque : il peut être nécessaire de remplacer mysql_config
par mariadb_config
Exécution
doe@debian:~$ ./selectEnCMysql fou_nom : G Meubles, fou_ville : Arpajon