문제

C/C ++의 색인 번호 대신 열 이름 (C ++ 맵과 같은)으로 SQLITE 결과에 액세스 할 수있는 방법이 있습니까?

예를 들어, Python의 SQLITE 액세스는 사전 액세스를 허용합니다.

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

SQLITE의 인터페이스에 대해 C ++에서 유사한 방법이 있습니까?

도움이 되었습니까?

해결책

나는 www.sqlapi.com에서 sqlapi ++를 추천하면서 Daniel과 함께 갈 것입니다. 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);
  }
}

다른 팁

열 이름의 색인을 알고 있다면 열 인덱스에 대한 로컬 변수를 작성하십시오.

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

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

최신 답변 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;
}
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top