C / C ++のインデックス番号ではなく列名(C ++マップなど)でSQLiteの結果にアクセスする方法はありますか?
たとえば、PythonのSQLiteアクセスにより、辞書アクセスが可能になります
Results = Query("SELECT * FROM table");
print Results['colname']
print Results['anothercol']
SQLiteのインターフェイス用にC++で利用できる同様のメソッドはありますか?
C / C ++のインデックス番号ではなく列名(C ++マップなど)でSQLiteの結果にアクセスする方法はありますか?
たとえば、PythonのSQLiteアクセスにより、辞書アクセスが可能になります
Results = Query("SELECT * FROM table");
print Results['colname']
print Results['anothercol']
SQLiteのインターフェイス用にC++で利用できる同様のメソッドはありますか?
私はダニエルと一緒にwww.sqlapi.comでSQLAPI++を推奨します。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);
}
}
新しい回答 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;
}
列名のインデックスがわかっている場合は、次のように列インデックスのローカル変数を作成します。
int colname = 0;
int anothercol = 2; //just guessing ;-)
Results = ...
std::cout << Results[colname];
std::cout << Results[anothercol];