C++ 使用qsql(c+;+;和qt)将数组(二进制数据)插入postgres数据库

C++ 使用qsql(c+;+;和qt)将数组(二进制数据)插入postgres数据库,c++,qt,postgresql,insert,C++,Qt,Postgresql,Insert,考虑以下与postgres数据库的交互操作: 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

考虑以下与postgres数据库的交互操作:

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 :-(
QSqlDatabase db=QSqlDatabase::addDatabase(“QPSQL”);
db.setHostName(“acidalia”);
db.setDatabaseName(“customdb”);
db.setUserName(“mojito”);
db.setPassword(“J0a1m8”);
bool ok=db.open();
QSqlQuery查询(db);
QSqlQuery查询(db);
QVector-byteArray(2);
byteArray[0]=0;
byteArray[1]=7;
QVariant v=QVariant::fromValue(byteArray);

coutINSERT声明了3个目标列,但有4个绑定值

查询.准备(“插入地理位置(gid、bboxx、bboxy)” “值(:gid,:bboxx,:bboxy,:pos)”


在bboxy之后添加bytea列后,应该可以使用。

感谢您的努力和帮助。不幸的是,我无法将数据发送到服务器:-(我已经更新了代码,以便更容易再现错误,以防您可以更仔细地查看问题..但是仍然存在列/绑定值与当前版本不匹配的问题:
插入aaa(gid)...
应该是
插入aaa(gid,pos).
数据库类型现在是int[]而主机类型是QVector这一事实也显著改变了问题。我不确定bindValue()是否可以直接用于数组。如果不能,典型的回退方法是传递数组的文本表示形式(根据postgresql数组语法)在文本绑定值中。太好了。谢谢你让我知道。我现在将尝试使用字节数组。原则上,我将空间信息保存在postgres中,这使我的生活更加轻松,因为我知道数据是如何用bytearray表示的:-)谢谢!