Hello Lloyd,
I gave you the answer, you just don't want to use it. Generating SQL
this way is painful, messy and error prone. SQLite already has a far
better mechanism for doing it using late binding of the parameters.
How about learning the right way to do this?
I'll give you a hint though
sql += "','";
sql += "details.statime";
sql += "','";
...
should work
You could do it with sprintf too and/or some IO stream thing but, I
never use them.
Conrad
Saturday, September 9, 2006, 9:41:01 PM, you wrote:
LT> if I could somehow create the following string as a char i cpuld probably
LT> get the code to work.
LT> sql = "insert into call_data (direction, call_time, dest,
LT> trunk_no, file_name)values('";
LT> sql += details.inout;
LT> sql += "','";
LT> sql += details.statime;
LT> sql += "','";
LT> sql += details.cidn;
LT> sql += "'";
LT> sql +=details.channel;
LT> sql += "','";
LT> sql += details.filename;
LT> sql += "')";
LT> I am getting stuck adding exist chars to the sql char
LT> defined chars
LT> ^ ^
LT> sql = "insert into call_data(direction,
LT> call_time)values('details.inout','details.statime)"
LT> Do you have any ideas?
LT> Lloydie T
LT> ----- Original Message -----
LT> From: "Teg" <[EMAIL PROTECTED]>
LT> To: "Lloyd Thomas" <[email protected]>
LT> Sent: Sunday, September 10, 2006 12:47 AM
LT> Subject: Re[2]: [sqlite] A lillte help adding sqlite to a c program
>> Hello Lloyd,
>>
>> You need to escape the quotes. Remember in C and C++ " means the
>> beginning or end of a literal string so, when you want to embed quotes
>> in a string you have to escape them. Probaby \".
>>
>> You'd be better off using the paramaterized version of the SQL
>>
>> std::string sql = "insert into call_data (direction, call_time, dest,
>> trunk_no,
>> file_name)values(?,?,?,?,?);";
>>
>> Then bind the actual parameters after the fact.
>>
>> C
>>
>>
>> Saturday, September 9, 2006, 7:02:43 PM, you wrote:
>>
>> LT> Jay, Thanks for your reply.
>> LT> I gave it a try with and got a few errors. as follows
>> LT> ---------------------------------------------------------------
>> LT> logger.cpp:609: error: invalid operands of types `const char[80]' and
>> LT> `char[4]' to binary `operator+'
>> LT> logger.cpp:615: error: `t' was not declared in this scope
>> LT> logger.cpp:615: warning: unused variable 't'
>> LT> logger.cpp:634: error: jump to case label
>> LT> logger.cpp:631: error: crosses initialization of `std::string test2'
>> LT> logger.cpp:628: error: crosses initialization of `std::string test1'
>> LT> logger.cpp:637: error: jump to case label
>> LT> logger.cpp:631: error: crosses initialization of `std::string test2'
>> LT> logger.cpp:628: error: crosses initialization of `std::string test1'
>> LT> logger.cpp:638: error: jump to case label
>> LT> logger.cpp:631: error: crosses initialization of `std::string test2'
>> LT> logger.cpp:628: error: crosses initialization of `std::string test1'
>> LT> logger.cpp:639: error: jump to case label
>> LT> logger.cpp:631: error: crosses initialization of `std::string test2'
>> LT> logger.cpp:628: error: crosses initialization of `std::string test1'
>> LT> logger.cpp:641: error: `t' was not declared in this scope
>> LT> logger.cpp:641: warning: unused variable 't'
>> LT> logger.cpp:664: error: jump to case label
>> LT> logger.cpp:621: error: crosses initialization of `bool Loop'
>> LT> logger.cpp:634: warning: destructor needed for `test2'
>> LT> logger.cpp:634: warning: where case label appears here
>> LT> logger.cpp:634: warning: (enclose actions of previous case statements
>> LT> requiring destructors in their own scope.)
>> LT> logger.cpp:637: warning: destructor needed for `test2'
>> LT> logger.cpp:637: warning: where case label appears here
>> LT> logger.cpp:638: warning: destructor needed for `test2'
>> LT> logger.cpp:638: warning: where case label appears here
>> LT> logger.cpp:639: warning: destructor needed for `test2'
>> LT> logger.cpp:639: warning: where case label appears here
>> LT> make: *** [logger.o] Error 1
>> LT> ------------------------------------------------------
>> LT> line 609 =
>> LT> sql = "insert into call_data (direction, call_time, dest, trunk_no,
>> LT>
>> file_name)values('"+details.inout+"','"+details.statime+"','"+details.cidn+"'"+details.channel+"','"+details.filename+"')";
>>
>>
>>
>>
>>
>>
>> LT> ----- Original Message -----
>> LT> From: "Jay Sprenkle" <[EMAIL PROTECTED]>
>> LT> To: <[email protected]>
>> LT> Sent: Saturday, September 09, 2006 11:16 PM
>> LT> Subject: Re: [sqlite] A lillte help adding sqlite to a c program
>>
>>
>>>> On 9/9/06, Lloyd Thomas <[EMAIL PROTECTED]> wrote:
>>>>> I know nothing of C++ and therefore need a lilte help editing a C++ app
>>>>> to
>>>>> insert some records into a database.
>>>>
>>>> here's an example to read from a database.
>>>> If you build the sql like you're doing and you use it on the web you
>>>> leave yourself
>>>> open to sql injection attacks. Using the bind() method eliminates that
>>>> vulnerability.
>>>> Something to consider.
>>>>
>>>> Jay
>>>>
>>>>
>>>> Here's some example code:
>>>>
>>>> sqlite3* db;
>>>>
>>>> // connect to database
>>>> if ( sqlite3_open( "test.db", &db ) )
>>>> throw "Can't open database";
>>>>
>>>> char* sql;
>>>>
>>>> sql = "SELECT one.test1, two.test2"
>>>> " FROM one"
>>>> " INNER JOIN two ON one.id = two.id"
>>>> ;
>>>> sqlite3_stmt* pStmt;
>>>>
>>>> if ( sqlite3_prepare( db, sql, strlen(sql), &pStmt, NULL ) !=
>>>> SQLITE_OK )
>>>> {
>>>> string str = "Cannot prepare sql: ";
>>>> str += sql[t];
>>>> str += ", Error: ";
>>>> str += sqlite3_errmsg(db);
>>>> throw str.c_str();
>>>> }
>>>>
>>>> bool Loop = true;
>>>> while ( Loop )
>>>> switch ( sqlite3_step( pStmt ) )
>>>> {
>>>> case SQLITE_ROW:
>>>> // retrieve the results
>>>> char* p = (char *) sqlite3_column_text( pStmt, 0 );
>>>> string test1 = string( p ? p : "" );
>>>>
>>>> p = (char *) sqlite3_column_text( pStmt, 1 );
>>>> string test2 = string( p ? p : "" );
>>>>
>>>> break;
>>>> case SQLITE_DONE:
>>>> Loop = false;
>>>> break;
>>>> case SQLITE_BUSY:
>>>> case SQLITE_LOCKED:
>>>> default:
>>>> string str = "Cannot execute sql: ";
>>>> str += sql[t];
>>>> str += ", Error: ";
>>>> str += sqlite3_errmsg(db);
>>>> throw str.c_str();
>>>> break;
>>>> }
>>>>
>>>> // clean up when finished
>>>> sqlite3_finalize( pStmt );
>>>>
>>>> sqlite3_close( db );
>>>>
>>>>
>>>>
>>>> --
>>>> SqliteImporter and SqliteReplicator: Command line utilities for Sqlite
>>>> http://www.reddawn.net/~jsprenkl/Sqlite
>>>>
>>>> Cthulhu Bucks!
>>>> http://www.cthulhubucks.com
>>>>
>>>> -----------------------------------------------------------------------------
>>>> To unsubscribe, send email to [EMAIL PROTECTED]
>>>> -----------------------------------------------------------------------------
>>>>
>>
>>
>> LT>
>> -----------------------------------------------------------------------------
>> LT> To unsubscribe, send email to
>> [EMAIL PROTECTED]
>> LT>
>> -----------------------------------------------------------------------------
>>
>>
>>
>>
>> --
>> Best regards,
>> Teg mailto:[EMAIL PROTECTED]
>>
>>
>> -----------------------------------------------------------------------------
>> To unsubscribe, send email to [EMAIL PROTECTED]
>> -----------------------------------------------------------------------------
>>
LT>
-----------------------------------------------------------------------------
LT> To unsubscribe, send email to [EMAIL PROTECTED]
LT>
-----------------------------------------------------------------------------
--
Best regards,
Teg mailto:[EMAIL PROTECTED]
-----------------------------------------------------------------------------
To unsubscribe, send email to [EMAIL PROTECTED]
-----------------------------------------------------------------------------