2014-01-08 35 views
1

我想將值插入包含使用C的REAL類型列的sqlite3數據庫中的表中。我想知道真實類型的格式說明符。sqlite3中真實類型的格式說明符

PSQL = 「插入%Q \ (xyz_id,num_of_xyz,時間,總,使用,REM)值\ ( '%Q',%I,%I,?,?);」;

並用sqlite3_exec執行它()

這裏總,使用和REM是REAL類型。那麼什麼是格式說明符被使用(?),我嘗試了'%i'但它不工作。

預先感謝

回答

1

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); 
} 
+0

非常感謝。使用準備好的聲明及其工作。再次感謝 – Chu