Помимо snprintf
, упомянутого в другом ответе, вы можете использовать функцию char *sqlite3_mprintf(const char*,...)
из API sqlite3. Он использует встроенную функцию sqlite printf
и выделяет память для строки, используя sqlite3_malloc64()
. Если все идет хорошо, он возвращает указатель на строку, в противном случае он возвращает NULL
:
int id = 999;
char *sql;
sql = sqlite3_mprintf("INSERT INTO REV_ENTITY (ID,NAME,AGE,ADDRESS,SALARY) VALUES (%d, 'REV', 25, 'Rich-Mond ', 65000.00 )", id);
if (sql != NULL) {
rc = sqlite3_exec(db, sql, callback, 0, &zErrMsg);
if (rc != SQLITE3_OK)
/* Do some error handling. */
sqlite3_free(sql);
}
В отличие от printf
семейства функций, sqlite3_mprintf
не может позволить себе сообщить, если формат не связан с аргументами. Так что, если случится так, что вы используете компилятор GCC, добавление следующего кода может быть полезным:
extern char *sqlite3_mprintf(const char *format, ...) __attribute__ ((format (printf, 1, 2)));
Другим решением, рекомендованным в комментариях, является использование функций подготовки, выполнения и финализации sqlite3:
int id = 999;
sqlite3_stmt *stmt = NULL;
char *sql = "INSERT INTO REV_ENTITY (ID,NAME,AGE,ADDRESS,SALARY) " \
" VALUES (?, 'REV', 25, 'Rich-Mond ', 65000.00 )";
sqlite3_prepare(db, sql, strlen(sql), &stmt, NULL);
/* Bind id. */
sqlite3_bind_int(stmt, 1, id);
if (sqlite3_step(stmt) == SQLITE_DONE) {
printf("Insertion success\n");
} else {
fprintf(stderr, "Insertion error\n");
}
/* Finalize and destroy statement. */
sqlite3_finalize(stmt);