MariaDB
 sql >> Base de données >  >> RDS >> MariaDB

Comment connecter des programmes C++ à MariaDB

Aujourd'hui, nous avons annoncé la disponibilité générale de MariaDB Connector/C++. Le langage C++ est connu pour son efficacité, sa polyvalence et son extensibilité. En fait, il est souvent utilisé dans des secteurs comme la fintech et les jeux où les applications nécessitent une simultanéité et une latence prévisibles. Avec MariaDB Connector/C++, les développeurs peuvent utiliser le nouveau connecteur dans leurs applications pour se connecter nativement à MariaDB Server sur site et dans le cloud sur MariaDB SkySQL.

Dans cet article, je vais vous présenter MariaDB Connector/C++ avec des exemples simples qui illustrent les interactions de création, lecture, mise à jour et suppression (CRUD) avec les données stockées dans MariaDB. Plus précisément, je vais parcourir le processus de création d'une application console C++ qui vous permettra d'effectuer des opérations simples pour gérer les tâches. Mais assez parlé, commençons !

Téléchargement et installation

Pour utiliser MariaDB Connector/C++, vous devez avoir accès à une instance de MariaDB Server. Il existe différentes manières de démarrer avec MariaDB sur votre ordinateur local, sur site ou même dans le cloud.

  1. Télécharger et installer MariaDB Community Server
    1. Directement
    2. Utiliser une image Docker
  2. Télécharger et installer MariaDB Enterprise Server 
  3. Déployez avec MariaDB SkySQL, la base de données cloud MariaDB ultime

Après avoir configuré une instance MariaDB Server, vous pouvez suivre les étapes fournies dans la documentation MariaDB Enterprise pour obtenir des instructions sur la façon de télécharger et d'installer MariaDB Connector/C++.

Préparer le serveur MariaDB

Dans cet exemple, avant de pouvoir utiliser le nouveau connecteur MariaDB C++, vous devez disposer d'une base de données et d'une table. À l'aide d'un client de votre choix, connectez-vous à votre instance de base de données MariaDB et :

1. Créez une nouvelle base de données et une table unique qui sera responsable du stockage des enregistrements de tâche.

CREATE DATABASE IF NOT EXISTS todo;CREATE TABLE todo.tasks (  id INT(11) unsigned NOT NULL AUTO_INCREMENT,  description VARCHAR(500) NOT NULL,  completed BOOLEAN NOT NULL DEFAULT 0,  PRIMARY KEY (id)); 

2. Créez un nouvel utilisateur de base de données que Connector/C++ utilisera pour se connecter à MariaDB.

CRÉER UN UTILISATEUR S'IL N'EXISTE PAS app_user@localhost IDENTIFIÉ PAR 'Password123 !' ; ACCORDER TOUS LES PRIVILÈGES SUR todo.* TO app_user@localhost ;

Connexion au serveur MariaDB

Maintenant que vous avez configuré votre instance de base de données, votre schéma et votre utilisateur, il est temps de passer au C++. Tout commence par établir une connexion à MariaDB. Bien sûr, pour ce faire, vous devez avoir inclus les fichiers d'en-tête du connecteur MariaDB, en particulier conncpp.hpp, en haut du fichier auquel vous ajoutez votre code C++.

#include 

Pour établir une connexion, commencez par récupérer un Driver objet qui peut ensuite être utilisé, en combinaison avec les informations de configuration Java Database Connectivity (JDBC), pour obtenir une Connection objet.

// Instanciez Driversql ::Driver* driver =sql ::mariadb ::get_driver_instance();// Configurez Connectionsql ::SQLString url("jdbc:mariadb://localhost:3306/todo");sql ::Properties properties({{"user", "app_user"}, {"password", "Password123!"}});// Établir Connectionstd ::unique_ptr conn(driver->connect(url, properties ));

Pour plus d'informations sur la fonctionnalité de connexion de MariaDB Connector/C++, assurez-vous de consulter notre documentation d'entreprise officielle.

Ajouter des tâches

Une fois que vous avez obtenu une Connection objectez, c'est parti pour les courses ! En utilisant conn, de la section précédente, vous pouvez maintenant exécuter SQL en utilisant une instruction préparée pour insérer des données dans MariaDB.

// Créer un nouveau PreparedStatementstd::unique_ptr stmnt(conn->prepareStatement("insert into tasks (description) values ​​(?)"));// Lier les valeurs aux instructions SQLtmnt->setString (1, description);// Exécuter la requêtestmnt->executeQuery();

Récupération des tâches

En utilisant une approche très similaire, comme dans la dernière section, vous pouvez également créer une Statement objet pour récupérer et imprimer tous les enregistrements de tâches dans le tableau des tâches.

// Créer un nouveau Statementstd::unique_ptr stmnt(conn->createStatement());// Exécuter querysql::ResultSet *res =stmnt->executeQuery("select * from tasks");// Boucler et print resultswhile (res->next()) { std::cout <<"id =" <getInt(1); std::cout <<", description =" <getString(2); std::cout <<", complete =" <getBoolean(3) <<"\n";}

Mise à jour des tâches

Vous pouvez également utiliser un PreparedStatement et en spécifiant des paramètres (et des valeurs) pour localiser et modifier un enregistrement de tâche existant.

// Créer un nouveau PreparedStatementstd::unique_ptr stmnt(conn->prepareStatement("mise à jour de l'ensemble de tâches terminé =? où id =?"));// Lier les valeurs aux instructions SQLtmnt->setBoolean(1, terminé); stmnt->setInt(2, id);// Exécuter la requêtestmnt->executeQuery();

Supprimer des tâches

Et, bien sûr, vous avez également la possibilité de supprimer des données de MariaDB en utilisant un DELETE SQL déclaration avec un PreparedStatement , pour cibler un enregistrement spécifique.

// Créer un nouveau PreparedStatementstd::unique_ptr stmnt(conn->prepareStatement("delete from tasks where id =?"));// Lier les valeurs aux instructions SQLtmnt->setInt(1, id);// Exécuter querystmnt->executeQuery();

Tout rassembler

Enfin, vous pouvez tout rassembler dans un seul exemple autonome en copiant et collant le code ci-dessous dans un nouveau fichier appelé tasks.cpp . L'exemple ci-dessous combine toutes les opérations CRUD que j'ai parcourues dans une collection de fonctions qui peuvent être exécutées à partir du main méthode.

#include  #include #include 
// Supprimer un enregistrement de tâche (indiqué par id)void deleteTask(std::unique_ptr &conn, int id) { try { // Créez un nouveau PreparedStatement std ::unique_ptr stmnt(conn->prepareStatement("supprimer des tâches où id =?")); // Lie les valeurs à l'instruction SQL stmnt->setInt(1, id); // Exécute la requête stmnt->executeQuery(); } catch(sql::SQLException&e){ std::cerr <<"Erreur lors de la suppression de la tâche :" < prepareStatement("tâches de mise à jour définies terminées = ? où id = ?") ); // Lie les valeurs à l'instruction SQL stmnt->setBoolean(1, complete); stmnt->setInt(2, id); // Exécute la requête stmnt->executeQuery(); } catch(sql::SQLException&e){ std::cerr <<"Erreur lors de la mise à jour de l'état de la tâche :" <prepareStatement("insérer dans les tâches (description) valeurs (?)")); // Lie les valeurs à l'instruction SQL stmnt->setString(1, description); // Exécute la requête stmnt->executeQuery(); } catch(sql::SQLException&e){ std::cerr <<"Erreur lors de l'insertion de la nouvelle tâche :" <createStatement()); // Exécute la requête sql::ResultSet *res =stmnt->executeQuery("select * from tasks"); // Boucle et affiche les résultats while (res->next()) { std::cout <<"id =" <getInt(1); std::cout <<", description =" <getString(2); std::cout <<", complete =" <getBoolean(3) <<"\n" ; } } catch(sql::SQLException&e){ std::cerr <<"Erreur lors de la sélection des tâches :" <connect(url, properties)); // Utilisez des arguments pour déterminer les prochaines étapes d'exécution if (!strcmp(argv[1],"showTasks")) { showTasks(conn); } else if (!strcmp(argv[1],"addTask")) { if (argc !=3) { std::cout <<"Arguments invalides" ; retour 1 ; } addTask(conn, argv[2]); } else if (!strcmp(argv[1],"updateTaskStatus")) { if (argc !=4) { std::cout <<"Arguments invalides" ; retour 1 ; } updateTaskStatus(conn, atoi(argv[2]), argv[3]); } else if (!strcmp(argv[1],"deleteTask")) { if (argc !=3) { std::cout <<"Arguments invalides" ; retour 1 ; } deleteTask(conn, atoi(argv[2])); } // Fermer la connexion conn->close(); } catch(sql::SQLException&e){ std::cerr <<"Erreur de connexion à la plate-forme MariaDB :" < 

Vous pouvez également trouver la source complète de cet exemple d'application ici. La source de cet exemple C++ est contenue dans un référentiel pour une application appelée "TODO", qui comprend également une interface Web et plusieurs autres exemples d'applications d'intégration de connecteur MariaDB couvrant une multitude de langages.

Exécuter l'application

Dans un environnement Linux, après avoir créé tasks.cpp , vous pouvez créer un fichier exécutable, appelé tâches, à l'aide d'un compilateur C++.

$ g++ -o tâches tâches.cpp -std=c++11 -lmariadbcpp

À l'aide du fichier exécutable, vous pouvez fournir diverses valeurs d'argument pour tester les opérations CRUD.

  • Insérer un nouvel enregistrement de tâche en fournissant une valeur pour la description.
./tasks addTask ‘Une nouvelle tâche’
  • Imprimer tous les enregistrements de tâche.
./tasks showTasks
  • Mettre à jour la valeur terminée d'un enregistrement de tâche. Fournissez simplement des valeurs pour id et complete.
./tasks updateTaskStatus 1 1
  • Supprimez un enregistrement de tâche en fournissant une valeur d'identifiant.
./tasks deleteTâche 1

Juste le début

J'espère que vous avez apprécié de voir à quel point il est facile de commencer à utiliser C++ avec MariaDB. Bien qu'il s'agisse d'une excellente introduction à la programmation C++ avec MariaDB, nous n'avons fait qu'effleurer la surface de ce qui est possible !

Vous cherchez à approfondir MariaDB Connector/C++ ? Assurez-vous de consulter le MariaDB Developer Hub pour encore plus de contenu sur le nouveau connecteur C++ ainsi que sur de nombreuses autres fonctionnalités et capacités de MariaDB.

Trouvez la documentation d'entreprise MariaDB Connector/C++.