我有json編碼的數據,可以有以下格式: {「forumla」:「callTo(\」par1 \「,\」par2 \「)」} 當我嘗試與一jsonb柱將其插入PostgreSQL表,我得到以下錯誤:插入到jsonb值與Qt
SQL error QSqlError(-1, "QPSQL: Unable to create query", "ERROR: invalid input syntax for type json
LINE 1: ...15-12-11 15:20:17.350', 21590, '{ "forumla...
^
DETAIL: Token "par1" is invalid.
CONTEXT: JSON data, line 1: ..." : "callTo(\\"par1...
「)
看起來Qt的某種方式取代轉義引號(\」)與一個轉義反斜線和報價。通過PSQL CLI作品插入的字符串。 有人可以幫我嗎?
在此先感謝。
更新:
我刪除了綁定,並用一個單一的替換雙反斜槓。 現在我可以成功插入值。
QSqlField f(name, QVariant::String);
f.setValue(fields.value(name));
const QString value = db.driver()->formatValue(f).replace("\\\\", "\\");
該問題可能源於Qt(至少在5.x之前)不知道數據庫中的json。所以它只能把它看作一個字符串,並且看到需要避免反斜槓。
這顯然不是一個理想的解決方案。
更新2:
我發現可接受的解決方案。 Qt(至少4.7)假定反斜槓是字符串值中的特殊字符。從9.1開始,這不再是這種情況(默認情況下)。見http://www.postgresql.org/docs/9.4/static/sql-syntax-lexical.html#SQL-SYNTAX-STRINGS-ESCAPE
所以我不得不設置以下這樣PostgreSQL的再次呈現\是轉義反斜線:
QSqlQuery query(db);
query.exec("SET standard_conforming_strings TO false");
你使用準備好的語句(如[這裏](http://stackoverflow.com/a/19045489/ 1499698))?它不應該是綁定參數的問題。 – pozs
我使用綁定變量,(特別是我使用QDjango庫),這可能是QString改變的原因。 – Daniel82