Frage

Gibt es eine Möglichkeit SQLite Ergebnisse von Spaltennamen für den Zugriff auf (wie eine C ++ Karte) anstelle von Indexzahl in C / C ++?

Zum Beispiel Python SQLite Zugriff ermöglicht Wörterbuch Zugriff

Results = Query("SELECT * FROM table");
print Results['colname']
print Results['anothercol'] 

Jede ähnliche Methoden in C ++ für die Schnittstelle des SQLite?

War es hilfreich?

Lösung

ich mit Daniel gehen würde SQLAPI ++ bei www.sqlapi.com bei der Empfehlung - unter http : //www.sqlapi.com/HowTo/fetch.html ein einfaches Beispiel für das Abrufen Felder nach Namen finden können. Das Beispiel ist ein bisschen ausführlicher hier ist also ein Code-only Kern:

void showemps(SAConnection* pconn, int minage)
{
  SACommand cmd(pconn, "select name, age from employees where age>:1");  
  cmd << minage;
  cmd.execute();
  while(cmd.FetchNext()) {
    SAString sName = cmd.Field("name");
    long nAge = cmd.Field("age");
    printf("Name: %s, age: %d \n", sName, nAge);
  }
}

Andere Tipps

Wenn Sie den Index der Spaltennamen kennen erstellen Sie einfach eine lokale Variable für den Spaltenindex wie:

int colname = 0;
int anothercol = 2; //just guessing ;-)

Results = ...
std::cout << Results[colname];
std::cout << Results[anothercol];

neuere Antwort http://www.sqlapi.com/ Diese Bibliothek könnte tun, was Sie wollen.

alte Antwort Grundsätzlich finden Sie die Spalten mit sqlite3_column_name16 oder sqlite3_column_name laufen müssen. Sie werden die Saiten diese Rückkehr mit dem man vergleichen müssen Sie nachschlagen möchten.

Ich habe verwendet, um diese, seine MFC, aber es gibt Ihnen die Grundidee, was zu tun.

int CSQLite3Query::FieldIndex(const CString &field)
{
    CheckVM();

    if ( !field.IsEmpty() )
    {
        for ( int nField = 0; nField < m_nCols; nField++ )
        {
#ifdef UNICODE
            CString sTemp = (LPCTSTR)sqlite3_column_name16(m_VM, nField);
#else
            CString sTemp = (LPCTSTR)sqlite3_column_name(m_VM, nField);
#endif
            if (sTemp == field)
                return nField;
        }
    }
    else
    {
        throw new CSQLite3Exception(MFCSQLITE3_ERROR,
                                    MFCSQLITE3_INVALID_FIELD_NAME);
    }

    return -1;
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top