使用qsql(c ++和qt)将数组(二进制数据)插入到postgres DB中

时间:2012-10-24 08:43:51

标签: 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);

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 个答案:

答案 0 :(得分:1)

INSERT声明了3个目标列,但是有4个绑定值。

  

query.prepare(“INSERT INTO geo(gid,bboxx,bboxy)”                 “VALUES(:gid,:bboxx,:bboxy,:pos)”);

一旦在bboxy之后添加了bytea列,这应该可行。