2009-08-04 77 views
16

我想創建/更新sqlite3中的文本列。 當我在創建/更新後檢索行時,文本是'?'。然而,整數值可以正確保持。何時使用SQLITE_TRANSIENT vs SQLITE_STATIC?

我的文字說明是這樣的:

const char *sql = "INSERT INTO todo(title, description, priority, status, created, expires, posx, posy, updated)" 
        " VALUES('?', '?', '?', '?', '?', '?', '?', '?', '?');"; 
if (sqlite3_prepare_v2(database, sql, -1, &insert_statment, NULL) != SQLITE_OK) 
    ... 
sqlite3_bind_text(update_statment, 5, [[dt stringFromDate:self.updated] UTF8String], -1, SQLITE_TRANSIENT); 

我試過SQLITE_TRANSIENT以及SQLITE_STATIC。這兩種情況似乎都會產生相同的結果('?')。我也驗證過,當它們被傳遞到適當的sql語句時,文本值是有效的。

任何想法?

+0

你準備好的陳述是什麼樣的? – 2009-08-04 18:31:18

回答

39

刪除'周圍的字符?在你的sql字符串中。

SQLITE_TRANSIENT告訴SQLite複製你的字符串。當你的字符串(的緩衝區)要在執行查詢之前消失時使用它。

SQLITE_STATIC告訴SQLite,您保證傳遞給該字符串的指針在執行查詢之前一直有效。當你的緩衝區是,這個,靜態的,或者至少有動態範圍超過綁定的時候,使用這個。

+0

我會試試這個。 – 2009-08-04 18:55:38

相關問題