great!

Thanks a lot for you answer!


Igor Tandetnik wrote:
> 
> liubin liu wrote:
>> I want to insert several pieces of data (include blob) into a table in a
>> transaction by programing in C language , like:
>> char *sql[n+2];
>> 
>> sql[0] = sqlite3_mprintf ("BEGIN;");
>> 
>> char *sql_f = "INSERT OR REPLACE INTO collstate VALUES (%d, %d, ?);";
> 
> Why don't you use parameters for all three values in the VALUES clause?
> Then you would only need one statement.
> 
>> for (i=1; i<n; i++)
>>    ret = sqlite3_bind_blob (p_stmt, i, st_mydata[i].data, sizeof
>> (st_mydata[i].data), SQLITE_STATIC);
> 
> The second parameter to sqlite3_bind_blob (in fact, all sqlite3_bind_*
> functions) is the index of a parameter within the statement. In your case,
> it should always be 1 (since you have only one parameter). Passing 'i'
> there doesn't make any sense.
> 
> So, in the end, you'll have somethng like this:
> 
> sqlite3_exec(db, "BEGIN", NULL, NULL, NULL);
> 
> sqlite3_stmt* stmt;
> const char* sql = "INSERT OR REPLACE INTO collstate VALUES (?, ?, ?);";
> sqlite3_prepare_v2(db, sql, -1, &stmt, NULL);
> 
> for (int i = 0; i < n; ++i) {
>   sqlite3_bind_int(stmt, 1, st_mydata[i].m1);
>   sqlite3_bind_int(stmt, 2, st_mydata[i].m2);
>   sqlite3_bind_blob(stmt, 3, st_mydata[i].data, sizeof(st_mydata[i].data),
> SQLITE_STATIC);
> 
>   sqlite3_step(stmt);
>   sqlite3_reset(stmt);
> }
> sqlite3_finalize(stmt);
> 
> sqlite3_exec(db, "END", NULL, NULL, NULL);
> 
> -- 
> Igor Tandetnik
> 
> _______________________________________________
> sqlite-users mailing list
> [email protected]
> http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users
> 
> 

-- 
View this message in context: 
http://old.nabble.com/How-to-patch-several-sql-words-into-one-words-tp27942977p27950871.html
Sent from the SQLite mailing list archive at Nabble.com.

_______________________________________________
sqlite-users mailing list
[email protected]
http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users

Reply via email to