【问题标题】:QSqlQuery UPDATE/INSERT DateTime with server's time (eg CURRENT_TIMESTAMP)QSqlQuery UPDATE/INSERT DateTime 与服务器的时间(例如 CURRENT_TIMESTAMP)
【发布时间】:2011-02-16 12:24:40
【问题描述】:

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

有什么建议吗?

【问题讨论】:

    标签: c++ mysql qt datetime qtsql


    【解决方案1】:

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

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

    应该可以解决问题。

    【讨论】:

      【解决方案2】:

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

      我能想到的唯一方法:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-03-18
        • 2018-08-02
        • 2016-05-30
        • 1970-01-01
        • 2010-10-07
        • 1970-01-01
        • 2011-09-29
        相关资源
        最近更新 更多