c++ cast von mysql_row nach Boolean, int, etc



  • Hallo,

    ich lerne gerade C++ und stehe vor folgendem Problem:
    Gibt es eine elegante Lösung einen direkten Cast von einem Ergebnis einer SQL-Abfrage durchzuführen?

    Also ich denke da an sowas wie:

    //[...hier realconnect etcetera pepe..]
    
    mysql_row = mysql_fetch_row (mysql_res);
    
    bool is_wahr;
    int nein_echt;
    std::string kann_nicht_sein;
    
    is_wahr=boolcast(mysql_row[1]);//Spalte eins der SQL-Tabelle enthaelt entweder 0 oder 1
    nein_echt=intcast(mysql_row[3]);//Spalte 3 immer Zahlen
    kann_nicht_sein=strcast(mysql_row[0]);//Spalte 0 immer char[32]
    

    Leider weiss ich nicht von welchem Typ mysql_row ist, und auch nicht wie man genau ein Casting in C++ macht.

    Gruss
    Robin



  • Nachtrag:

    Im Moment mache ich es so:

    bool isbool(string temp)
    {
    	if (temp=="1")return true;
    	return false;
    };
    

    und

    per atoi(mysql_row[x]);
    Beim atoi kann man sicher nichts mehr optimieren.
    Falls jemand eine Idee hat die isbool Funktion zu optimieren, dann bitte posten.
    Falls nicht, werde ich es wohl so lassen.

    Gruss
    R



  • bololo77 schrieb:

    bool isbool(string temp)
    {
    if (temp=="1")return true;
    return false;
    };
    [/cpp]

    Ist wahr immer 1?
    Zumindest in C/C++ ist true alles, was nicht 0/false ist

    if (temp != "0")return true;
    	return false;
    


  • so wie ich's in erinnerung habe, ist 'mysql_row' ein array aus nullterminierten strings. bei bools, die immer "0" oder "1" sein können, könnt gehen:

    bool isbool (char *b)
    {
    return b[0]-'0';
    }



  • Die C-API von MySQL gibt immer eine string zurück.
    Es gibt eine API-Funktion welche Dir den Spaltentype liefert. Dadirch kannst Du dann selbst entscheiden welchen Type Du zurückgibst.



  • Klingt fast nach "Programmiere dir doch einen Caster"....
    Naja, wenns sich nicht vermeiden laesst, muss ich das wohl tun, ich probier aber erstmal net's Lösung...

    Gruss
    R


Anmelden zum Antworten