MySQL mit C++



  • Hallo,

    ich bin ein Neueinsteiger. Muss mich Studienbedingt mit C++ auseinandersetzen. Habe gute bis sehr gute Kenntnisse in PHP und MySQL, daher sollte es nicht allzu schwierig sein. Jedoch suche ich jetzt schon seit einer Stunde, wie das mit den Datenbanken läuft. Vielleicht kann mir jemand helfen. Was ich bisher rausgefunden habe: Man braucht einen ODBC Treiber, der das ganze handelt. Wie sieht aber dann z.B. ein Code für eine Verbindung aus, welche Header Dateien muss man includen?

    Wäre für Hilfe recht dankbar.



  • Auf der Webseite von MySQL kriegst du auch ne Library mit Header files für MySQL.
    Ansonsten hat ODBC nutzen.



  • ja, das habe ich mir fast gedacht. nur wie nutzt man denn odbc? gibt irgendwo ein gutes tut?





  • hey super, der link bringt mich schon weiter. jedoch scheitere ich sofort wieder, da die headerdatei sql.h gebraucht wird. wenn ich aber folgendes bei mir zu kompilieren versuche (visual studio 6) dann bekomme ich zwei fehler:

    #include <stdio.h>
    #include <sql.h>
    
    int main(){
    	return 0;
    }
    

    und zwar sagt er dann als fehler:
    c:\programme\microsoft visual studio\vc98\include\sqltypes.h(114) : error C2146: Syntaxfehler : Fehlendes ';' vor Bezeichner 'SQLHWND'
    c:\programme\microsoft visual studio\vc98\include\sqltypes.h(114) : fatal error C1004: Unerwartetes Dateiende gefunden

    ist meine sql.h kaputt? wenn ja, wo bekomme ich eine neue?



  • ODBC mag ich nicht 😉

    Ich würde dir die MySQL C-API empfehlen. Die ist auch auf Systemen nutzbar, die kein ODBC haben...
    Die entsprechenden Headerdatein sind bei der Serverinstallation im Includeverzeichnis.

    MYSQL mysql;
    mysql_init(&mysql);
    mysql_real_connect(&ysql,"IP","USER","PWD","DB",0,NULL,0);
    mysql_real_query(&mysql,"Query",/* Zeichenlänge der Query */);
    MYSQL_RES *result = mysql_store_result(&mysql);
    MYSQL_ROW row;
    while(result!=NULL && (row = mysql_fetch_row(result))!=NULL)
    {
        // tu was mit row[i]...
    }
    

    mit ODBC kann ich nicht helfen 😞



  • -=]xXx[=- schrieb:

    ODBC mag ich nicht 😉

    Ich würde dir die MySQL C-API empfehlen. Die ist auch auf Systemen nutzbar, die kein ODBC haben...
    Die entsprechenden Headerdatein sind bei der Serverinstallation im Includeverzeichnis.

    MYSQL mysql;
    mysql_init(&mysql);
    mysql_real_connect(&ysql,"IP","USER","PWD","DB",0,NULL,0);
    mysql_real_query(&mysql,"Query",/* Zeichenlänge der Query */);
    MYSQL_RES *result = mysql_store_result(&mysql);
    MYSQL_ROW row;
    while(result!=NULL && (row = mysql_fetch_row(result))!=NULL)
    {
        // tu was mit row[i]...
    }
    

    mit ODBC kann ich nicht helfen 😞

    Wenn du nur mit MySQL arbeiten tust, würde ich dir auch die MySQL C-Api empfehlen, da kann ich aber nicht weiterhelfen, da ich mit MySQL nicht arbeite.



  • Wow, das habe ich gestern sogar noch alles selbst rausgefunden. Das ist toll, dass sich welche von euch damit auskennen, da ich meine ersten Probleme damit habe:

    #include <stdio.h>
    #include <my_global.h>
    #include <mysql.h>
    
    int main(){
    	//create a pointer of the type mysql
    	MYSQL *conn;
    	//initialize your mysql connection
    	conn = mysql_init(NULL);
    	//connect to your database
    	mysql_real_connect(conn,"localhost","root","root","gemwob",0,NULL,0);
    	// perform a query
    	mysql_query(conn,"SELECT * FROM PERSON");
    
    	printf("total affected rows: %lld", mysql_affected_rows(conn));
    
    	// close the connection
    	mysql_close(conn);
    	return 0;
    }
    

    So sieht es momentan bei mir aus. Kompiliert auch super. Aber wenn ich das Programm dann erstellen will, dann meckert der Linker:

    dbverbindung.obj : error LNK2001: Nichtaufgeloestes externes Symbol _mysql_close@4
    dbverbindung.obj : error LNK2001: Nichtaufgeloestes externes Symbol _mysql_affected_rows@4
    dbverbindung.obj : error LNK2001: Nichtaufgeloestes externes Symbol _mysql_query@8
    dbverbindung.obj : error LNK2001: Nichtaufgeloestes externes Symbol _mysql_real_connect@32
    dbverbindung.obj : error LNK2001: Nichtaufgeloestes externes Symbol _mysql_init@4
    Debug/Datenbank.exe : fatal error LNK1120: 5 unaufgeloeste externe Verweise
    Fehler beim Ausführen von link.exe.

    Datenbank.exe - 6 Fehler, 0 Warnung(en)

    Was ist das? Wieso kommt das?



  • du musst die libmysql.lib ins Projekt einbinden und libmysql.dll bereitstellen (System- oder Programmverzeichnis). Beide Datein sind mit dem Server mitgeliefert.

    mfg
    xXx



  • Das hat mir jetzt schon sehr viel weitergeholfen. Nun habe ich jedoch erneut Probleme beim ausführen von folgendem Code:

    #include <iostream>
    using namespace std;
    #include <my_global.h>
    #include <mysql.h>
    
    int main(){
    	MYSQL *conn;
    	conn = mysql_init(NULL);
    	mysql_real_connect(conn,"localhost","root","root","gemwob",0,NULL,0);
    
    	mysql_query(conn,"SELECT nachname FROM PERSON");
    	MYSQL_RES *result = mysql_store_result(conn);
    	MYSQL_ROW row;
    
    	int i=0;
    	while(result!=NULL && (row = mysql_fetch_row(result))!=NULL){
    		cout << row[i] << endl;
    		i++;
    	}
    
    	mysql_close(conn);
    	return 0;
    }
    

    Das Code soll mir aus einer Tabelle alle Namen rausholen (das macht er auch) und dann der reihe nach anzeigen. Es wird aber nur der erste Name angezeigt und dann bekomme ich einen speicherfehler. Wo liegt der Fehler? kann mir da jemand helfen?



  • Hat sich erledigt. Vielen Dank für alle Hilfe.


Anmelden zum Antworten