2012-10-24 52 views
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語句,並執行查詢作爲服務器上的正常查詢(其中字節數組將插入爲一個字符串),但我正在尋找一個更好的解決方案..

回答

1

INSERT有3目標列聲明但是4個綁定值。

query.prepare( 「INSERT INTO地理位置(GID,bboxx,bboxy)」 「VALUES(:GID,:bboxx,:bboxy,:POS)」);

一旦bytea列添加到bboxy後面,這應該工作。

+0

感謝您的努力和幫助。不幸的是,我無法發送數據到服務器:-(我已經更新了代碼,sot更容易重現錯誤,以防您可以仔細查看問題.. – arthur

+0

但是仍然存在問題列不匹配/綁定值與當前版本:INSERT INTO aaa(gid)...應該是INSERT INTO aaa(gid,pos)... –

+0

另外事實上,數據庫類型現在是int [ ]並且主機類型爲QVector 會明顯改變問題,我不確定bindValue()是否可以直接用於數組,如果不能,那麼典型的回退是傳遞數組的文本表示(根據到postgresql數組的語法)在一個文本綁定值 –