2010-05-06 342 views
0

我正在使用QSqlQuery插入數據到MySQL數據庫。目前我所關心的是讓這個與MySQL一起工作,但理想情況下,我希望儘可能保持平臺無關。QSqlQuery更新/插入日期時間與服務器的時間(例如CURRENT_TIMESTAMP)

什麼我後,在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文檔挖掘以及我知道如何,但我找不到API專門設計用於支持MySQL的CURRENT_TIMESTAMP()函數或任何其他DBMS的任何東西。

有什麼建議嗎?

回答

2

我沒有SQL服務器到這裏測試,但addBindValue()綁定Qt的數據類型。您應該將時間戳功能直接放入查詢中

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

應該做的竅門。

1

我看不到獲取數據庫時間命令的方法。我認爲這將在QSqlDriver,因爲它是特定於數據庫。

我能想到的唯一的辦法:

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

編輯:其實,我不知道CURRENT_TIMESTAMP()是DB具體...