0
考慮與Postgres數據庫以下interraction:刀片陣列(二進制數據)與QSQL(C++和Qt)一個postgres DB
QSqlDatabase db = QSqlDatabase::addDatabase("QPSQL");
db.setHostName("acidalia");
db.setDatabaseName("customdb");
db.setUserName("mojito");
db.setPassword("J0a1m8");
bool ok = db.open();
QSqlQuery query(db);
QSqlQuery query(db);
QVector<int> byteArray(2);
byteArray[0] = 0;
byteArray[1] = 7;
QVariant v = QVariant::fromValue(byteArray);
cout << "dropping a table: " << query.exec("drop table aaa;") << endl; //gives 1
cout << "creating a table: " << query.exec("create table aaa (gid integer, pos integer[])") << endl; // gives 0
query.prepare("INSERT INTO aaa (gid) VALUES (:gid, :pos)");
query.bindValue(0, 1);
query.bindValue(1, v);
cout << "inserting: " << query.exec() << endl; // gives 0 :-(
當然,這樣做將是發送數據的一種方法與手動構建的SQL語句,並執行查詢作爲服務器上的正常查詢(其中字節數組將插入爲一個字符串),但我正在尋找一個更好的解決方案..
感謝您的努力和幫助。不幸的是,我無法發送數據到服務器:-(我已經更新了代碼,sot更容易重現錯誤,以防您可以仔細查看問題.. – arthur
但是仍然存在問題列不匹配/綁定值與當前版本:INSERT INTO aaa(gid)...應該是INSERT INTO aaa(gid,pos)... –
另外事實上,數據庫類型現在是int [ ]並且主機類型爲QVector會明顯改變問題,我不確定bindValue()是否可以直接用於數組,如果不能,那麼典型的回退是傳遞數組的文本表示(根據到postgresql數組的語法)在一個文本綁定值 –