Еще раз спасибо всем за ваш отзыв. На этот раз я сообщаю, как я решил проблему с помощью указаний, приведенных здесь. Надеюсь, это поможет другим в будущем.
Как указывалось в первых трех постерах, я использовал подготовленные высказывания & mdash; кроме того, потому что я также был заинтересован в получении типов данных столбцов, а простой sqlite3_get_table()
не подойдет.
После подготовки оператора SQL в виде следующей константной строки:
INSERT INTO table VALUES(?,?,?,?);
остается привязкой соответствующих значений. Это делается путем выдачи столько вызовов sqlite3_bind_blob()
, сколько столбцов. (Я также прибегнул к sqlite3_bind_text()
для других «простых» типов данных, потому что API, над которым я работаю, может переводить целые / двойные / и т. Д. В строку). Итак:
void* blobvalue[4];
int blobsize[4];
char *tail, *sql="INSERT INTO table VALUES(?,?,?,?)";
sqlite3_stmt *stmt=0;
sqlite3 *db;
/* ... */
db=sqlite3_open("sqlite.db");
sqlite3_prepare_v2(db,
sql, strlen(sql)+1,
&stmt, &tail);
for(int i=0; i<4; i++)
sqlite3_ bind_ blob(stmt,
i+1, blobvalue[i], blobsize[i],
SQLITE_TRANSIENT);
if(sqlite3_step(stmt)!=SQLITE_DONE)
printf("Error message: %s\n", sqlite3_errmsg(db));
sqlite3_finalize(stmt);
sqlite3_close(db);
Обратите внимание, что некоторые функции (sqlite3_open_v2()
, sqlite3_prepare_v2()
) появляются в более поздних версиях SQLite (я полагаю, 3.5.x и более поздние версии).