web-dev-qa-db-fra.com

Comment connecter une base de données mySQL avec C ++

J'essaie de connecter la base de données à partir de mon site Web et d'afficher certaines lignes en C++. J'essaie tellement de créer une application qui effectue une requête de sélection à partir d'une table de la base de données de mon site. Maintenant, cela doit être possible car j'ai vu des tonnes d'applications le faire.

Comment puis-je faire cela? Quelqu'un peut-il donner un exemple et me dire quelles bibliothèques je devrais utiliser?

33
lepel100

Trouvé ici :

/* Standard C++ includes */
#include <stdlib.h>
#include <iostream>

/*
  Include directly the different
  headers from cppconn/ and mysql_driver.h + mysql_util.h
  (and mysql_connection.h). This will reduce your build time!
*/
#include "mysql_connection.h"

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

using namespace std;

int main(void)
{
cout << endl;
cout << "Running 'SELECT 'Hello World!' »
   AS _message'..." << endl;

try {
  sql::Driver *driver;
  sql::Connection *con;
  sql::Statement *stmt;
  sql::ResultSet *res;

  /* Create a connection */
  driver = get_driver_instance();
  con = driver->connect("tcp://127.0.0.1:3306", "root", "root");
  /* Connect to the MySQL test database */
  con->setSchema("test");

  stmt = con->createStatement();
  res = stmt->executeQuery("SELECT 'Hello World!' AS _message"); // replace with your statement
  while (res->next()) {
    cout << "\t... MySQL replies: ";
    /* Access column data by alias or column name */
    cout << res->getString("_message") << endl;
    cout << "\t... MySQL says it again: ";
    /* Access column fata by numeric offset, 1 is the first column */
    cout << res->getString(1) << endl;
  }
  delete res;
  delete stmt;
  delete con;

} catch (sql::SQLException &e) {
  cout << "# ERR: SQLException in " << __FILE__;
  cout << "(" << __FUNCTION__ << ") on line " »
     << __LINE__ << endl;
  cout << "# ERR: " << e.what();
  cout << " (MySQL error code: " << e.getErrorCode();
  cout << ", SQLState: " << e.getSQLState() << " )" << endl;
}

cout << endl;

return EXIT_SUCCESS;
}
32
hd1

Enfin, j'ai pu compiler avec succès un programme avec un connecteur C++ dans Ubuntu 12.04. J'ai installé le connecteur à l'aide de cette commande

'apt-get install libmysqlcppconn-dev'

Initialement, je rencontrais le même problème avec "référence non définie à` get_driver_instance '"" pour résoudre ce problème, je déclare ma variable d'instance de pilote de type MySQL_Driver. Pour référence immédiate, ce type est défini dans le fichier mysql_driver.h. Voici l'extrait de code que j'ai utilisé dans mon programme.

sql::mysql::MySQL_Driver *driver;
try {     
    driver = sql::mysql::get_driver_instance();
}

et j'ai compilé le programme avec l'option de linker mysqlcppconn -l

et n'oubliez pas d'inclure cet en-tête

#include "mysql_driver.h" 
10
munawwerali

Oui, vous aurez besoin de la bibliothèque de connecteurs mysql c ++. Lisez ci-dessous, où j'explique comment faire fonctionner l'exemple donné par les développeurs mysql.

Note (et solution): IDE: J'ai essayé d'utiliser Visual Studio 2010, mais il y a à peine quelques points, cela a fonctionné. il semble que je l’aie manqué dans le manuel, mais il est suggéré d’utiliser Visual Studio 2008. J’ai téléchargé et installé VS2008 Express pour c ++, puis j'ai suivi les étapes décrites au chapitre 5 du manuel et les erreurs ont disparu! Ça marche. Je suis heureux, le problème est résolu. À l'exception de celui sur la façon de le faire fonctionner sur les nouvelles versions de Visual Studio. Vous devriez essayer le plug-in mysql for visual studio qui obtiendra peut-être la version vs2010 ou supérieure pour une connexion réussie. Il peut être téléchargé à partir du site Web mysql

En essayant de faire fonctionner l'exemple mentionné ci-dessus, je me retrouve ici face à des difficultés dues aux modifications apportées au site Web mysql dev. Je m'excuse d'avoir écrit ceci comme réponse, car je ne peux pas encore commenter et je l'éditerai au fur et à mesure que je découvrirai comment faire et trouver la solution, de sorte que les futurs développeurs puissent être aidés. t ont adapté comme un commentaire de toute façon, haha)

@ hd1 lien vers "un exemple" ne fonctionne plus. Après le lien, on se retrouvera sur la page qui vous donne un lien vers le manuel principal. Le manuel principal est une bonne référence, mais semble être assez ancien et obsolète, et difficile pour les nouveaux développeurs, car nous n’avons aucune expérience, surtout si nous manquons un certain fichier, et puis ce qu’il faut ajouter.

Le lien @ hd1 a été déplacé et peut être trouvé en effectuant une recherche rapide en supprimant les composants de l’URL, en ne conservant que le nom de l’article, le voici quand même:http: // dev. mysql.com/doc/connector-cpp/en/connector-cpp-examples-complete-example-1.html

Utiliser 7.5 MySQL Connector/C++ Complétez l'exemple 1 pour qu'il fonctionne

Téléchargements:

-Obtenez le connecteur mysql c ++, même s'il est plus gros, choisissez le paquet d'installation, pas le zip.

-Obtenir les bibliothèques boost de boost.org, puisque boost est utilisé dans connection.h et mysql_connection.h à partir du connecteur mysql c ++

Maintenant, procédez:

-Installez le connecteur sur votre lecteur c, puis allez dans le dossier d’installation du serveur mysql/lib et copiez tous les fichiers libmysql, puis collez-le dans le dossier d’installation du connecteur/lib/opt.

-Extraire la librairie boost de votre lecteur c

Suivant:

Il est correct de copier le code tel qu'il est à partir de l'exemple (lié ci-dessus, et bien sûr dans un nouveau projet c ++). Vous remarquerez des erreurs:

-Premier: changement

cout << "(" << __FUNCTION__ << ") on line " »
 << __LINE__ << endl;

à

cout << "(" << __FUNCTION__ << ") on line " << __LINE__ << endl;

Je ne sais pas à quoi sert cette petite double flèche, mais je ne pense pas que cela fasse partie de c ++

-Second: Corrigez les autres erreurs en lisant Chapitre 5 du manuel de SQL , notez mon paragraphe concernant le chapitre 5 ci-dessous

[Note 1]: Chapitre 5 Création d'applications Connector MySQL/C++ Windows avec Microsoft Visual Studio Si vous suivez ce chapitre En utilisant le dernier connecteur c ++, vous verrez probablement que ce qui se trouve dans votre dossier de connecteurs et ce que vous voyez dans les images sont assez différents. Que vous regardiez dans l’installation du serveur mysql avec les dossiers include et lib ou dans les dossiers include et lib du dossier connecteur mysql c ++, cela ne correspondra pas parfaitement à moins qu’il mette à jour le manuel, ou si vous avez effectué un téléchargement magique, correspondre à un téléchargement de connecteur lancé en mars 2014.

Il suffit de suivre ce chapitre 5,

-Mais pour c/c ++, général, les répertoires d'inclusion supplémentaires incluent le dossier "include" du connecteur que vous avez installé, pas le dossier d'installation du serveur

-En faisant ce qui précède, incluez également votre dossier boost voir la note 2 ci-dessous

-Et pour l'éditeur de liens, le général, etc., utilisez le dossier opt de connecteur/lib/opt

* [Note 2] * Une deuxième inclusion doit se produire, vous devez inclure à partir de la bibliothèque de boost variant.hpp, la procédure est la même que ci-dessus, ajoutez le dossier principal que vous avez extrait du boost Zip à télécharger, pas boost ou lib ou le sous-dossier "variant" se trouvant dans boostmainfolder/boost .. Juste le dossier principal en tant que second

Suivant:

Je pense que la prochaine étape est la construction statique, et bien c’est ce que j’ai fait de toute façon. Suis le.

Ensuite, construisez/compilez. Les erreurs LNK apparaissent (Edit: Gone après avoir changé ide en Visual Studio 2008). Je pense que c’est parce que je devrais créer moi-même un connecteur (si vous faites cela dans Visual Studio 2010, les erreurs de lien devraient disparaître), mais que je travaille depuis jeudi pour que cela fonctionne, je vais voir si j’ai la motivation pour le faire. après une bonne nuit de sommeil (et maintenant et fini :)).

6
Alan Ball

Je devais inclure -lmysqlcppconn à ma construction pour que cela fonctionne.

3
Nick Kotenberg