21

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

有任何想法吗?

4

1 回答 1

48

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

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

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

于 2009-08-04T18:53:34.180 回答