On 3/8/06, cstrader <[EMAIL PROTECTED]> wrote:
> Would someone be willing to share with me c++ code that reads the result of a 
> select query into an array representing the data of the j rows in a selected 
> column?  I understand that callback() is executed once for each row of the 
> data.  But what is the best and fastest way to iteratively write these row 
> data into a single array that I can pass to my host program?


Callbacks are problematic in C++. It's tricky to get the address of a
class member
and provide the 'this' pointer correctly. Here's a quick example of
reading a single
record (I have a wrapper around the sqlite calls, but I think it gets
the message across):


    // open database
    dbOpen();

    // check to see if user is admin or moderator
    string sql = "SELECT
CookieUser,CookieVisit,Timezone,CookieLife,CGI,URL,ContactName,ContactMail,Description
FROM Setup";

    // prepare statement instead of building it to avoid sql injection attacks
    if ( ! dbPrep( sql ) )
      throw ConException( string("Cannot prepare sql: ") + sql +
string(", ") +  + sqlite3_errmsg(db) );

    switch ( dbStep() )
      {
        case SQLITE_ROW:
          // get results ( 0 based index!!! )
          CookieUser  = dbColumn( 0 );
          CookieVisit = dbColumn( 1 );
          Timezone    = dbColumn( 2 );
          CookieLife  = atol( dbColumn( 3 ) );
          CGI         = dbColumn( 4 );
          URL         = dbColumn( 5 );
          ContactName = dbColumn( 6 );
          ContactMail = dbColumn( 7 );
          Description = dbColumn( 8 );
          break;
        case SQLITE_DONE:
          if ( CookieUser.empty() )
            throw ConException( string("Invalid configuration") );
          break;
        default:
          throw ConException( string("Cannot execute sql: ") + sql );
          break;
      }

    // clean up when finished
    dbFinalize();
    dbClose();


dbColumn looks like this:

//---------------------------------------------------------------------------
// return a pointer to the text of a result row
// 0 based index!
//---------------------------------------------------------------------------
char* Convention::dbColumn( const unsigned int Index )
  {
    char* p = (char*) sqlite3_column_text( pStmt, Index );
    return (char*) ( p ? p : "" );
  }

Reply via email to