何时使用 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)?