sqlite3_mprintf
是一個C函數,並使用C型; %i
用於int
值。 浮點值將被格式化爲%f
。
(請注意:%q
使用轉義的作品只有內部SQL字符串;你不能用這種格式表名)
在任何情況下,這將是適得其反的值轉換成文本,只是爲了解析數據庫再次返回到浮點值。 一個更好的辦法是使用準備好的語句,這樣就可以使用parameter binding functions,就像這樣:
sqlite3 *db = ...;
const char *sql = "INSERT INTO MyTable(xyz_id, num_of_xyz, time, total, used, rem)"
" values (?,?,?,?,?,?)";
sqlite3_stmt *stmt;
if (sqlite3_prepare_v2(db, sql, -1, &stmt, NULL) != SQLITE_OK) {
printf("error: %s\n", sqlite3_errmsg(db));
} else {
sqlite3_bind_text (stmt, 1, "xyz ID", -1, SQLITE_TRANSIENT);
sqlite3_bind_int (stmt, 2, 123);
sqlite3_bind_int (stmt, 3, 456);
sqlite3_bind_double(stmt, 4, 1.23);
sqlite3_bind_double(stmt, 5, 4.56);
sqlite3_bind_double(stmt, 6, 7.89);
if (sqlite3_step(stmt) != SQLITE_DONE)
printf("error: %s\n", sqlite3_errmsg(db));
sqlite3_finalize(stmt);
}
非常感謝。使用準備好的聲明及其工作。再次感謝 – Chu