当使用SQLITE_TRANSIENT VS SQLITE_STATIC?(When to use

2019-06-27 20:56发布

我想在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语句这里的文本值是有效的。

有任何想法吗?

Answer 1:

围绕删除'字? 在您的SQL字符串。

SQLITE_TRANSIENT告诉SQLite的复制你的字符串。 当你的字符串(的缓冲区)会在执行查询之前走开,请使用此。

SQLITE_STATIC告诉你的承诺,你传递给字符串指针将是有效的查询被执行后,直到SQLite的。 当你的缓冲区,嗯,静态的,或者至少具有超过绑定的是动态范围使用此功能。



文章来源: When to use SQLITE_TRANSIENT vs SQLITE_STATIC?