Problem mit Datenbank-Klasse (MySQL)



  • - Schau Dir nochmal an, wie man sein Problem beschreibt!
    - Schau Dir nochmal an, wie man Zeiger verwendet!
    - Schau Dir nochmal an, wie man MySQL mit C++ verwendet



  • Und zusätzlich:

    - kein using namespace in Header Dateien
    - kein string.h inkludieren
    - keine Bezeichner, die mit _ (Underscore) beginnen
    - Header Guards zu Beginn der Headerdatei
    - Rule of 3 (5) berücksichtigt? Es gibt einen Copy-Konstruktor, aber keinen Zuweisungsoperator

    Edit:
    Und warum überall ein virtueller Destruktor?



  • Die virtuellen Destruktoren hat mir Netbeans immer automatisch erstellt..

    Ich habe jetzt nochmal ein wenig rumprobiert und habe es jetzt so hinbekommen das es funktioniert, vorrausgesetzt ich bekomme ein Result zurück. Wenn das nicht der Fall ist schmiert mein Programm hier ab:

    MySQLRes *MySQLConnection::execute() {
        MYSQL_RES res = *this->query(this->statement);    
        return new MySQLRes(&res);
    }
    

    Genauer gesagt in der hier zweiten Zeile.

    query sieht so aus:

    MYSQL_RES *MySQLConnection::query(string query) {
        MYSQL_RES *res;
        int state;
        if (!this->isConnected()) {
            throw "Not connected to Database.";
        }
        state = mysql_query(this->connection, query.c_str());
        if (state < 0) {
            throw getError();
        }
        res = mysql_store_result(this->connection);
        if (res == (MYSQL_RES *) NULL) {
            int fieldCount = mysql_field_count(this->connection);
            if (fieldCount != 0) {
                throw getError();
            } else {
                affectedRows = mysql_affected_rows(this->connection);
            }
            return (MYSQL_RES *) NULL;
        }
        return res;
    }
    

    Mittels Debugger habe ich bereits festgestellt das mir korrekt wie es sein soll in der drittletzten Zeile die NULL zurückgegeben wird..

    Meine Frage jetzt: Wie gehe ich damit am besten um? Weil soweit ich das verstanden habe wird mir damit ein Nullpointer zurückgegeben und mit dem kann dann wohl nicht richtig weitergearbeitet werden? Weil Nullpointer dereferenziert ist wohl böse?
    Bin aber über mehr Nachhilfe was Pointer angeht dankbar wenn ich das falsch verstanden habe.. Die Teile verwirren mich immer noch sehr -.-"

    Mit Headerguards sind wohl die Abfragen gemeint die verhindern sollen das eine Header-Datei mehrmals eingebunden wird?? Auch hier hat mir Netbeans das bereits so vorgefertigt, habe mir da selber bisher noch wenig Gedanken drüber gemacht muss ich gestehen^^
    Und wofür bräuchte ich jetzt zwingend noch einen Zuweisungsoperator??

    MfG



  • Schau Dir nochmal an, wie man Zeiger verwendet!



  • Könntest du mir eventuell mal nen Link geben wo es deiner Meinung nach gut beschrieben ist?
    Weil offensichtlich waren die Quellen die ich gefunden habe ja nicht gut genug, sonst würdest du mir den Hinweis ja kaum geben^^



  • phost schrieb:

    Könntest du mir eventuell mal nen Link geben wo es deiner Meinung nach gut beschrieben ist?

    Mir ist keiner bekannt.

    Weil offensichtlich waren die Quellen die ich gefunden habe ja nicht gut genug, sonst würdest du mir den Hinweis ja kaum geben^^

    Ich sehe hier nirgendwo Zweifel an deinen Quellen.



  • Naja ich habe mir bereits einiges über Zeiger durchgelesen aber habe wohl immer noch einen Fehler drin den ich nicht entdecken. Und da du sagst es liegt daran wie ich die Zeiger verwende fände ich es schön zu wissen wo genau mein Fehler ist und worin dieser besteht.
    Weil "aus eigener Kraft" komme ich nicht weiter. Außer vllt sinnlos rumzuprobieren aber gelernt habe ich dabei dann ja auch nichts^^



  • - Schau Dir nochmal an, wie man sein Problem beschreibt!
    - Schau Dir nochmal an, wie man MySQL mit C++ verwendet

    Aber du bist ja schon seit Wochen völlig lernresistent. Wie dein Grundproblem zu lösen ist, wurde dir hier schon am 31.8. gesagt. Den MySql C++ Connector per MySql C Connector nach zubauen ist Schwachsinn.

    Vielleicht trollst du ja sowieso nur ...



  • Ja die Idee das ich mir das selber alles zusammenschreibe habe ich jetzt tatsächlich verworfen. Wollte das zu Lernzwecken versuchen aber gut, lass ich das halt.

    Bin jetzt auf den fertigen Connector umgeschwenkt und damit tuts jetzt alles so wie es soll.

    Und das "seit Wochen" kommt nur daher das ich selten Zeit habe mit C++ rumzuspielen, entsprechend langsam komme ich also voran.



  • Pro-Tipp:

    Du nimmst ab sofort soci und bist wahnsinnig glücklich mit dem super schönen Interface und freust dich, wenn du bei einem Datenbankwechsel nur an einer Stelle den Typ der Datenbank ändern musst 😉



  • Nein, wird er nicht. Nicht, weil SOCI nicht zu gebrauchen ist, sondern weil ihm Grundlagen fehlen. Das Problem des OT ist im Zusammenhang mit der mySQL C-API nur sichtbar geworden, der Schwenk auf den Connector hat das eigentliche Problem nicht gelöst, sondern nur auf unbestimmte Zeit verschoben.



  • Genau so schauts aus


Anmelden zum Antworten