2

我正在尝试从 c++/QT 应用程序插入 SQLite 数据库。我要插入数据的表的列之一是日期时间(yyyy-mm-dd hh:mm:ss)。

我尝试使用此代码:

...
query.prepare("INSERT INTO table (table_date_time, ...) "
        " VALUES (?, ...);");
query.bindValue(0, "datetime('2004-12-11 13:00:00', '+1 day')");
...

但它会插入文本“datetime('2004-12-11 13:00:00', '+1 day')”而不是值 2004-12-12 13:00:00。如果我尝试

...
query.prepare("INSERT INTO table (table_date_time, ...) "
        " VALUES (datetime(?), ...);");
query.bindValue(0, "2004-12-11 13:00:00, +1 day");
...

或者

...
query.prepare("INSERT INTO table (table_date_time, ...) "
        " VALUES (datetime(?), ...);");
query.bindValue(0, "'2004-12-11 13:00:00',' +1 day'");
...

日期时间字段未填写。沿参数使用日期时间函数的正确方法是什么?

提前致谢。

4

2 回答 2

2

绑定值仅替换一个参数,datetime函数的 2 个参数必须单独发送:

query.prepare("INSERT INTO table (table_date_time, ...) "
        " VALUES (datetime(?, ?), ...)");
query.bindValue(0, "2004-12-11 13:00:00");
query.bindValue(1, "+1 day");
于 2012-08-25T21:48:23.723 回答
2

如果你使用QDateTime,你可以获得类似的结果。

query.prepare("INSERT INTO table (table_date_time, ...) "
        " VALUES (:datetime, ...)");
QDateTime timestamp = QDateTime::currentDateTime();
timestamp.addDays(1);
// Qt::ISODate format...
query.bindValue(":datetime", timestamp);// 2017-09-05T11:50:39
// Custom format
query.bindValue(":datetime", timestamp.toString("yyyy-MM-dd hh:mm:ss"));  // same as above but without the T

请注意,对于 sqlite 中的文本字段, QDateTimeto QVariantto 会QString产生默认格式“YYYY-MM-DDTHH:mm:ss”。

请参阅Qt::ISODate和QDateTime ::toString

于 2017-09-05T16:02:33.627 回答