QSqlQuery UPDATE / INSERT DateTime与服务器的时间(例如CURRENT_TIMESTAMP)

时间:2010-05-06 17:53:36

标签: c++ mysql qt datetime qtsql

我正在使用QSqlQuery将数据插入MySQL数据库。目前我所关心的只是让它与MySQL一起工作,但理想情况下我希望尽可能保持与平台无关。

在MySQL的上下文中,我最终得到的代码是有效地执行类似以下查询的代码:

UPDATE table SET time_field=CURRENT_TIMESTAMP() WHERE id='5'

以下代码是我尝试过的,但它失败了:

QSqlQuery query;
query.prepare("INSERT INTO table SET time_field=? WHERE id=?");
query.addBindValue("CURRENT_TIMESTAMP()");
query.addBindValue(5);
query.exec();

我得到的错误是:Incorrect datetime value: 'CURRENT_TIMESTAMP()' for column 'time_field' at row 1 QMYSQL3: Unable to execute statement。我并不感到惊讶,因为我认为Qt在绑定值时会进行一些类型检查。

我已经挖掘了Qt文档以及我知道如何,但我在专门为支持MySQL的CURRENT_TIMESTAMP()函数或任何其他DBMS的API中找不到任何内容。

有什么建议吗?

2 个答案:

答案 0 :(得分:2)

我这里没有要测试的SQL服务器,但addBindValue()绑定了Qt的数据类型。您应该将时间戳函数直接放入查询

QSqlQuery query;
query.prepare("INSERT INTO table SET time_field=CURRENT_TIMESTAMP() WHERE id=?");
query.addBindValue(5);
query.exec();

应该这样做。

答案 1 :(得分:1)

我没有看到获取数据库时间命令的方法。我认为它将在QSqlDriver中,因为它特定于数据库。

我能想到的唯一方法:

QString timeCommand("CURRENT_TIMESTAMP()");
query.prepare(QString("INSERT INTO table SET time_field=%1 WHERE id=?").arg(timeCommand));

编辑:事实上,我不确定CURRENT_TIMESTAMP()是否特定于数据库......