it-swarm.com.de

So verbinden Sie eine mySQL-Datenbank mit C ++

Ich versuche, die Datenbank von meiner Website aus zu verbinden und einige Zeilen mit C++ anzuzeigen. Grundsätzlich versuche ich, eine Anwendung zu erstellen, die eine Auswahlabfrage aus einer Tabelle aus meiner Standortdatenbank ausführt. Das muss jetzt möglich sein, weil ich Tonnen von Anwendungen gesehen habe, die das gemacht haben.

Wie mache ich das? Kann mir jemand ein Beispiel geben und sagen, welche Bibliotheken ich verwenden soll?

33
lepel100

Gefunden hier :

/* 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

Endlich konnte ich ein Programm mit C++ Connector in Ubuntu 12.04 erfolgreich kompilieren. Ich habe den Connector mit diesem Befehl installiert

'apt-get install libmysqlcppconn-dev'

Anfänglich hatte ich das gleiche Problem mit "undefiniertem Verweis auf" get_driver_instance "", um dieses Problem zu lösen. Ich deklariere meine Treiberinstanzvariable vom Typ "MySQL_Driver". Zur Veranschaulichung ist dieser Typ in der Datei mysql_driver.h definiert. Hier ist das Code-Snippet, das ich in meinem Programm verwendet habe.

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

und ich kompilierte das Programm mit der Option -l mysqlcppconn linker

und vergessen Sie nicht, diesen Header einzuschließen

#include "mysql_driver.h" 
10
munawwerali

Ja, Sie benötigen die mysql c ++ Connector-Bibliothek. Lesen Sie weiter unten, wo ich erkläre, wie Sie das von MySQL-Entwicklern gegebene Beispiel zum Laufen bringen.

Hinweis (und Lösung): IDE: Ich habe versucht, Visual Studio 2010 zu verwenden, aber vor ein paar Sekunden hat das alles geklappt Arbeit, es scheint, als hätte ich es im Handbuch verpasst, aber es schlägt vor, Visual Studio 2008 zu verwenden. Ich habe VS2008 Express für c ++ heruntergeladen und installiert, die Schritte in Kapitel 5 des Handbuchs befolgt und Fehler sind verschwunden! Es klappt. Ich bin glücklich, das Problem ist gelöst. Mit Ausnahme der Frage, wie man es auf neueren Versionen von Visual Studio zum Laufen bringt. Sie sollten das mysql for visual studio-Addon ausprobieren, das möglicherweise eine Verbindung zu vs2010 oder höher herstellt. Es kann von der MySQL-Website heruntergeladen werden

Während ich versuche, das oben erwähnte Beispiel zum Laufen zu bringen, stoße ich hier auf Schwierigkeiten aufgrund von Änderungen an der mysql dev-Website. Ich entschuldige mich dafür, dass ich dies als Antwort geschrieben habe, da ich noch keinen Kommentar abgeben kann. Ich werde dies bearbeiten, sobald ich herausgefunden habe, was zu tun ist und wie ich die Lösung finden kann, damit zukünftigen Entwicklern geholfen werden kann. habe sowieso nicht als Kommentar gepasst, haha)

@ hd1 Link zu "einem Beispiel" funktioniert nicht mehr. Wenn Sie dem Link folgen, gelangen Sie auf die Seite mit dem Link zum Haupthandbuch. Das Haupthandbuch ist eine gute Referenz, scheint aber ziemlich alt und veraltet zu sein und für neue Entwickler schwierig zu sein, da wir keine Erfahrung haben, insbesondere wenn wir eine bestimmte Datei vermissen und was dann hinzuzufügen ist.

@ hd1s Link ist umgezogen und kann mit einer schnellen Suche durch Entfernen der URL-Komponenten unter Beibehaltung des Artikelnamens gefunden werden. Hier ist es sowieso: http://dev.mysql.com/doc/connector-cpp/de/connector-cpp-examples-complete-example-1.html

7.5 MySQL Connector/C++ Complete Beispiel 1 zum Laufen bringen

Downloads:

-Holen Sie sich den mysql c ++ Connector, obwohl dieser größer ist, wählen Sie das Installationspaket, nicht das Zip.

-Holen Sie sich die boost-Bibliotheken von boost.org, da boost in connection.h und mysql_connection.h über den mysql-c ++ - Connector verwendet wird

Nun gehe weiter:

-Installieren Sie den Connector auf Ihrem C-Laufwerk, gehen Sie dann zu Ihrem MySQL-Server-Installationsordner/lib und kopieren Sie alle libmysql-Dateien und fügen Sie sie in Ihren Connector-Installationsordner/lib/opt ein

-Extrahieren Sie die Boost-Bibliothek auf Ihr Laufwerk c

Weiter:

Es ist in Ordnung, den Code so zu kopieren, wie er aus dem Beispiel stammt (oben verlinkt und natürlich in ein neues c ++ - Projekt). Sie werden Fehler bemerken:

-Erstens: ändern

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

zu

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

Ich bin mir nicht sicher, wofür dieser winzige Doppelpfeil ist, aber ich glaube nicht, dass er Teil von c ++ ist

- Zweitens: Beheben Sie andere Fehler durch Lesen von Kapitel 5 des SQL-Handbuchs , beachten Sie meinen Absatz zu Kapitel 5 unten

[Hinweis 1]: Kapitel 5 Erstellen von MySQL Connector/C++ - Windows-Anwendungen mit Microsoft Visual Studio Wenn Sie Wenn Sie diesem Kapitel folgen und den neuesten C++ - Konnektor verwenden, werden Sie wahrscheinlich feststellen, dass das, was sich in Ihrem Konnektorordner befindet und was in den Bildern gezeigt wird, ganz anders ist. Egal, ob Sie in den Ordnern include und lib des mysql-Servers oder include und lib des mysql c ++ -Connectors nachsehen, sie stimmen nicht perfekt überein, es sei denn, sie aktualisieren das Handbuch oder Sie hatten einen magischen Download, aber für mich tun sie das nicht Übereinstimmung mit einem Connector-Download, der im März 2014 gestartet wurde.

Folgen Sie einfach diesem Kapitel 5,

-Aber für c/c ++, Allgemein, Zusätzliche Include-Verzeichnisse enthalten Sie den Ordner "include" des Connectors, den Sie installiert haben, nicht den Serverinstallationsordner

- Wenn Sie dies tun, fügen Sie auch Ihren Boost-Ordner hinzu, siehe Hinweis 2 unten

-Und für den Linker, General .. etc verwenden Sie den Opt-Ordner von Connector/lib/opt

* [Anmerkung 2] * Es muss ein zweites Include erfolgen, das Sie aus der Boost-Bibliothek variant.hpp einbinden müssen. Gehen Sie dazu wie oben beschrieben vor und fügen Sie den Hauptordner hinzu extrahiert aus dem boost zip download, nicht boost oder lib oder den unterordner "variant" in boostmainfolder/boost .. nur der hauptordner als zweites include

Weiter:

Was ich als nächstes denke, ist der statische Build. Nun, genau das habe ich auch getan. Folge es.

Dann bauen/kompilieren. LNK-Fehler werden angezeigt (Bearbeiten: Nach dem Ide-Wechsel zu Visual Studio 2008 verschwunden). Ich denke, das liegt daran, dass ich den Connector selbst erstellen sollte (wenn Sie dies in Visual Studio 2010 tun, dann sollten Verbindungsfehler verschwinden), aber ich arbeite seit Donnerstag daran, dies zum Laufen zu bringen Nach einer guten Nacht schlafen (und tat und jetzt fertig :)).

6
Alan Ball

Ich musste -lmysqlcppconn zu meinem Build hinzufügen, damit es funktioniert.

3
Nick Kotenberg