何时使用 SQLITE_TRANSIENT 与 SQLITE_STATIC?

Posted

技术标签:

【中文标题】何时使用 SQLITE_TRANSIENT 与 SQLITE_STATIC?【英文标题】:When to use SQLITE_TRANSIENT vs SQLITE_STATIC? 【发布时间】:2010-11-16 18:40:28 【问题描述】:

我想在 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】:

去掉 ' 周围的字符?在你的 sql 字符串中。

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

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

【讨论】:

在 Swift 中,我如何知道我的字符串何时会消失? ***.com/questions/60499265/…

以上是关于何时使用 SQLITE_TRANSIENT 与 SQLITE_STATIC?的主要内容,如果未能解决你的问题,请参考以下文章

何时/为啥使用 s.shutdown(socket.SHUT_WR)?

何时使用或何时不使用malloc函数?学数据结构有感

iOS KVO - 检测何时再次设置相同的值

在 React / Redux 中了解 UI 何时准备就绪

何时在 Java 中使用 Identity 函数? [复制]

何时使用 .First 以及何时将 .FirstOrDefault 与 LINQ 一起使用?