何时使用SQLITE_TRANSIENT vs SQLITE_STATIC?

时间:2009-08-04 18:18:39

标签: static sqlite transient

我想在sqlite3中创建/更新文本列。 当我在创建/更新后检索行时,文本为“?”。 但是,整数值会被正确保留。

我的文字陈述如下:

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语句时是有效的。

有什么想法吗?

1 个答案:

答案 0 :(得分:42)

删除'周围的人物?在你的sql字符串中。

SQLITE_TRANSIENT告诉SQLite复制你的字符串。在执行查询之前,当你的字符串(缓冲区)消失时使用它。

SQLITE_STATIC告诉SQLite你保证传递给字符串的指针在执行查询之前一直有效。当缓冲区为,嗯,静态或至少具有超过绑定的动态范围时,请使用此方法。