2009-08-04 139 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