SQLite C ++ Zugriff Spalten nach Namen
-
03-07-2019 - |
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?
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;
}