Wie kann ich mit C++ auf MySQL zugreifen?



  • Ich beschaftige mich nun seit ein paar Tagen mal mit den Moeglichkeiten mit C++ auf eine MySQL Datenbank zuzugreifen, also einen Client zu schreiben.

    Leider aber finde ich auf einige Fragen keine Antwort:

    1. Wie verhaelt sich das mit der "MySQL++ API"? Das ist doch, wenn ich das richtig verstanden habe, eine API - also eine Library? - mit deren Hilfe ich unter C++ auf MySQL zugreifen kann, mit der ich mir also - so ich denn gut genug bin - meinen eigenen Client basteln koennte?

    2. Irgendwo hier in diesem, meinem Lieblingsforum, habe ich dann auch gelesen, es wuerde die "MySQL++ API" bei MYSQL.COM zum Download geben. Leider kann ich da aber nur den Hinweis finden, dass das Projekt nun von jemand uebernommen wurde; das war's dann aber auch schon!

    Ist das so richtig, oder ist die jetzt bei MySQL automatisch dabei wie die C API?

    Wenn nein, woher bekomme ich das gute Stueck, wenn ja, wie greife ich auf die API zu bzw. welche Libs bzw. Headerfiles muss ich dafuer einbinden?

    Einen ersten Client habe ich bereits mit C geschrieben, aber irgendwie ist mir C++ trotz anfaenglicher Schwierigkeiten einfach sympathischer und "geht mir besser von der Hand". SOCI habe ich angetestet, ist mir aber irgendwie zu Oracle-lastig. Im Moment schaue ich mir gerade TNTDB an, wuerde mich aber halt trotzdem gern mit der MySQL++ API beschaeftigen, und sei es nur um die Grundlagen besser verstehen zu koennen.

    Danke im voraus.

    Guenther

    PS: Lieber Moderator: Sorry, ich weiss dass dieses Thema moeglicherweise im Bereich Datenbanken besser aufgehoben waere und genau dort habe ich vor zwei Tagen auch schon mal eine diesbezuegliche Frage gestartet, leider aber bisher ohne Erfolg. Ich wuerde mich daher freuen, wuerde dieser Thread nicht nach "Datenbanken" verschoben und auch nicht als Crossposting eingeordnet, welche ich moeglichst zu vermeiden versuche!



  • Also. Vom Prinzip her ist die MySQL++ Bibliothek ein Wrapper der C-API von MySQL.

    <a href= schrieb:

    MySQL++">MySQL++ is a C++ wrapper for MySQL's C API. It is built around STL principles, to make dealing with the database as easy as dealing with an STL container.

    Auf der deutschen Seite von MySQL wurde alles ein wenig eingedeutscht(was mal wieder dünnpfiff ist ...) und d.h. findest du eine API bei denen als Treiber (ja ok man kann es evtl. wegen den OBDC usw. erklären.)

    http://www.mysql.de/products/connector/

    Die C-API ist bei MySQL dabei, solange du MySQL Server als Development Machin installierst.

    Die C++-"API" findest du bei oben genannter Zitatquelle oder bei http://tangentsoft.net/mysql++/ . Wobei letztere die offizielle Projekt-Webseite ist. http://tangentsoft.net/mysql++/releases/mysql++-2.3.2.tar.gz ist der Quellcode der aktuellen Version. Musst du dir nur entsprechend builden und schon kannst du ihn nutzen 🙂



  • (D)Evil schrieb:

    Die C-API ist bei MySQL dabei, solange du MySQL Server als Development Machin installierst.

    Ok, dann hatte ich das soweit richtig verstanden ...

    (D)Evil schrieb:

    Die C++-"API" findest du bei oben genannter Zitatquelle oder bei http://tangentsoft.net/mysql++/ . Wobei letztere die offizielle Projekt-Webseite ist. http://tangentsoft.net/mysql++/releases/mysql++-2.3.2.tar.gz ist der Quellcode der aktuellen Version. Musst du dir nur entsprechend builden und schon kannst du ihn nutzen 🙂

    Super, da hast Du mir jetzt aber ein ganz gewaltiges Stueck weitergeholfen, denn trotzt stundenlangem googeln sind mir die beiden Links bisher unbekannt und leider habe ich trotzt recht intensiver Suche auch hier im Forum nichts gefunden.

    Ok, dann will ich mich da gleich mal ranmachen, schlafen kann ich ja auch spaeter noch ... 🙂

    Vorerst mal ein grosses DANKESCHOEN fuer Deine Muehe.

    Gruss

    Guenther



  • Ich habe mir heute mal MySQL++ installiert, scheint ja ein sehr maechtige Paket zu sein ...

    Doku und Beispiele habe ich auch bereits studiert, kriege aber leider selbst kein Programm, also weder die mitgeleiferten Examples noch eigenen Code compiliert.

    Ich lande immer bei der Fehlermeldung:

    undefined reference to `connect_to_db(int, char**, mysqlpp::Connection&, char const*)'
    collect2: ld returned 1 exit status
    

    Wenn ich's richtig interpretiere, dann fehlt dem Linker eine Library, nur welche ist das?

    Aktuell habe ich die mysqlclient, mysqlclient_r und mysqlpp eingebunden, aber da scheint noch was zu fehlen, oder??

    Gruss

    Guenther



  • Frag doch sowas im Datenbank-Forum (weiter unten) nach. Hier gehts um ISO-C++ und nicht um Compiler und Linker und fremde Libs.



  • @gboelter:

    Also nach dem ganzen Theater, welches du durchgemacht hast. Hier noch ein Tip von mir. Nimm die C-Api, bastel ne Klasse drum rum. Hab ich auch gemacht und noch nie Probleme damit gehabt. Ist auch gar nicht so groß.



  • Dem Linker fehlt scheinbar die MyAQL-C-API. Überprüf mal die Einstellungen im Linker, ob die abhängigen Bibliotheken auch den richtigen Pfad haben. Ich hab den Wrapper auch schon benutzt und der funktioniert super, da brauchst dir nichts eigenes basteln eigentlich.

    Greetz



  • Hi,

    gboelter schrieb:

    denn trotzt stundenlangem googeln

    nach was genau hast du denn gegoogelt? Mit den Begriffen "Mysql++" "API" kann man schon ganz gut was anfangen...



  • Nur mal kurz zur Erklaerung:

    Ich versuche reines ANSI C++ zu lernen, auch wenn das am Anfang nicht immer gleich so klappt. Und genau das war fuer mich der Grund, warum ich meine Fragen hier im C++ Forum gestellt habe.

    Sicherlich hat meine urspruengliche Frage auch was mit Datenbanken & MySQL zu tun, aber mir geht es darum, wie ich den C++ Teil realisieren kann. Mit der Datenbankseite habe ich keine Probleme. Und eben genau deshalb interessieren mich eben Dinge wie diese MySQL++.

    Denn so wie ich's bisher verstanden habe, ist das ja genau die eine Library, die es moeglich macht mittels C++ auf die Datenbank zuzugreifen und nicht zum Beispiel nur ueber C. Denn Libraries schaue mir derzeit eigentlich nur an, um daraus zu lernen.

    Benutzen tue ich sie nicht, so wie ich derzeit auch keine IDE verwende, sondern einen recht simplen Texteditor unter Linux.

    Das waren so meine Ueberlegungen, als ich darueber nachgedacht habe, in welchem Forum ich denn nun diese Fragen stelle.

    Sollte aber eine Moderator der Meinung sein, dieser Thread sollte doch besser verschoben werden, so haette ich damit natuerlich auch keine Probleme.

    Ihr wisst ja, "hinterher ist man immer schlauer", meistens jedenfalls.

    Trotzdem vielen Dank an alle die versucht haben mir auch hier zu helfen und nichts fuer ungut, ich werd's schon noch lernen ...

    Gruss

    Guenther



  • Hi,

    gboelter schrieb:

    Ich versuche reines ANSI C++ zu lernen, auch wenn das am Anfang nicht immer gleich so klappt. Und genau das war fuer mich der Grund, warum ich meine Fragen hier im C++ Forum gestellt habe.

    ISO C++ beinhaltet aber leider keine Schnittstellen zu irgendwelchen Datenbanken. Sobald du externe Libs benutzt, ist es kein Standard mehr. Die Frage ist eben auch, ob solche Aktionen den Lernprozess nicht eher verhindern als fördern, denn wenn du die Grundlagen nicht kennst, wird es ziemlich kompliziert, alles auseinanderzuhalten.

    Denn so wie ich's bisher verstanden habe, ist das ja genau die eine Library, die es moeglich macht mittels C++ auf die Datenbank zuzugreifen und nicht zum Beispiel nur ueber C. Denn Libraries schaue mir derzeit eigentlich nur an, um daraus zu lernen.

    Genau. Und du musst sowohl Header einbinden als auch dem Linker sagen, welche Libs du brauchst.

    Letzteres kannst du übrigens mit der -l option tun.



  • CarstenJ schrieb:

    Genau. Und du musst sowohl Header einbinden als auch dem Linker sagen, welche Libs du brauchst. Letzteres kannst du übrigens mit der -l option tun.

    Da ist mir schon klar. Problem ist nur manchmal, und das geht sicherlich nicht nur mir so, zu wissen, welche Funktion denn nun in welcher Library steht; wie zum Beispiel aktuell bei mir die connect_to_db().

    Bei den Header Files ist das ja meist noch einfach, weil ich mit z. B. mit grep oder was auch immer suchen kann, abeer eben nicht bei die Libs, oder kannst Du da einen Weg?



  • In der Doku steht:

    Will it build under GCC 2.x?
    No, it won't.

    Will it build under Visual C++.NET (a.k.a. Visual Studio 2002, a.k.a. Visual C++ 7.0) or earlier?
    No, it won't.
    ABER: Microsoft is giving away a limited but functional version of Visual C++ 2005 which works just fine with MySQL++.

    Ich arbeite auch mit der C-API von MySQL, läuft super. Das einbinden ist völlig problemlos aber wenn du gute Erfahrungen mit MySQL++ sammelst, kannst du ja mal Bescheid sagen 🙂



  • [quote="Badestrand"]In der Doku steht:

    Will it build under GCC 2.x?
    No, it won't.

    Danke fuer den Hinweis, aber den kannte ich schon. DEshalb arbeite ich ja auch mit "gcc (GCC) 4.1.2 20070626 (Red Hat 4.1.2-13)" ... 🙂

    Badestrand schrieb:

    Will it build under Visual C++.NET (a.k.a. Visual Studio 2002, a.k.a. Visual C++ 7.0) or earlier?
    No, it won't.

    Ich dachte eigentlich, meine Signatur waere deutlich genug ... 🙄



  • Hi,

    connect_to_db wird in "util.h" deklariert und in "util.cpp" implementiert. D.h. du musst das zusätzlich mitkompilieren. Es gibt also keine Library, mit der du das linken kannst.

    Herausgefunden habe ich das auch nur, in dem den Sourcecode durchgesehen habe.



  • CarstenJ schrieb:

    connect_to_db wird in "util.h" deklariert und in "util.cpp" implementiert. D.h. du musst das zusätzlich mitkompilieren. Es gibt also keine Library, mit der du das linken kannst.

    Ich fass es nicht, aber genau das war das Problem. Die Funktion steht in keiner Lib sondern in einem cpp-File. Zugegeben, an diese Moeglichkeit habe ich ueberhaupt nicht gedacht, aber man lernt halt nie aus ... 👍

    CarstenJ schrieb:

    Herausgefunden habe ich das auch nur, in dem den Sourcecode durchgesehen habe.

    Nun ja, ein kleines README haette da wirklich nicht geschadet.

    Dennoch, Du hast was gut bei mir, D A N K E!!! 🙂 🙂 🙂

    Gruss
    Guenther

    PS: Und beim naechsten Mal werde ich natuerlich Fragen rund um MySQL in "Datenbanken" stellen, versprochen ... 😉


Anmelden zum Antworten