0

我创建了列类型为“日期”的表SQLite。但是,当我用参数调用插入语句时:

sqlite3_bind_text(stmt, 6, [@"strftime('%%Y-%%m-%%d at %%H:%%M','now', 'localtime')" UTF8String],  -1, SQLITE_TRANSIENT);

它不工作并返回结果:

strftime('%%Y-%%m-%%d at %%H:%%M','now', 'localtime')

请帮我!谢谢!

4

1 回答 1

1

当您调用时,sqlite3_bind_text您正在绑定一个文字字符串值。不执行字符串。

假设你有这样的东西:

sqlite3_stmt *stmt;
sqlite3_prepare_v2(dbHandle, "INSERT INTO table_name (column1, column2) VALUES (?, ?)", -1, query, nil);
sqlite3_bind_text(stmt, 1, [@"strftime('%%Y-%%m-%%d at %%H:%%M','now', 'localtime')" UTF8String], -1, SQLITE_TRANSIENT);
sqlite3_bind_text(stmt, 2, "Other value", -1, SQLITE_TRANSIENT);

在这种情况下,您想要的是这样的:

sqlite3_stmt *stmt;
sqlite3_prepare_v2(dbHandle, "INSERT INTO table_name (column1, column2) VALUES (strftime('%%Y-%%m-%%d at %%H:%%M','now', 'localtime'), ?)", -1, query, nil);
sqlite3_bind_text(stmt, 1, "Other value", -1, SQLITE_TRANSIENT);

您希望strftime直接在查询中调用。请注意,由于您在查询中少了一个?,因此您需要调整调用中使用的索引sqlite3_bind_xxx

于 2013-04-21T03:46:02.767 回答