SQLite C ++ Доступ столбцы по имени - PullRequest
0 голосов
/ 04 мая 2009

Есть ли способ получить доступ к результатам SQLite по имени столбца (например, карте C ++) вместо номера индекса в C / C ++?

Например, доступ Python к SQLite обеспечивает доступ к словарю

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

Есть ли в C ++ аналогичные методы для интерфейса SQLite?

Ответы [ 3 ]

2 голосов
/ 04 мая 2009

Если вы знаете индекс имен столбцов, просто создайте локальную переменную для индекса столбца, например:

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

Results = ...
std::cout << Results[colname];
std::cout << Results[anothercol];
2 голосов
/ 04 мая 2009

Я бы порекомендовал Дэниелу порекомендовать SQLAPI ++ на www.sqlapi.com - на http://www.sqlapi.com/HowTo/fetch.html вы можете найти простой пример выборки полей по имени. Пример немного многословен, так что вот суть только для кода:

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);
  }
}
2 голосов
/ 04 мая 2009

более новый ответ http://www.sqlapi.com/ Эта библиотека может делать то, что вы хотите.

старый ответ В основном вам придется перебирать столбцы с sqlite3_column_name16 или sqlite3_column_name. Вам нужно будет сравнить эти строки с той, которую вы хотите найти.

Я использовал это, его MFC, но оно дает вам базовое представление о том, что нужно сделать.

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;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...