0

我正在使用 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 中找不到任何东西。

有什么建议么?

4

2 回答 2

2

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

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

应该做的伎俩。

于 2010-05-06T19:49:58.533 回答
1

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

我能想到的唯一方法:

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

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

于 2010-05-06T19:37:33.057 回答