2013-03-16 20 views
0

我使用的libpq PostgreSQL数据库的图书馆,我有一个关于从数据库检索数据BYTEA问题。我无法解决我的问题,所以想问你。每当我尝试将图像文件插入到数据库并将其恢复时,返回数据的大小始终是我发送数据的2倍。实际上,确切的等式是:检索数据=发送数据* 2 + 2(以字节为单位)。所以,我无法弄清楚的是,我可能失去了一些东西:/检索图像文件返回插入(由libpq库)两次大数据

我用一个例子的代码如下图所示:

PGresult* res; 
const char* paramValues[1] = {plateImageArray.data()}; // data type is const char* 
int   paramLengths[1] = {plateImageArray.size()}; // size of image is 58573 bytes 
int   paramFormats[1] = {1}; // 1 for byte, 0 for text 

res = PQexecParams(conn, 
     "INSERT INTO \"plates\" (plateImage) VALUES ($1::bytea)", 
     1,    /* param number */ 
     NULL,   /* param type */ 
     paramValues,  /* param values*/ 
     paramLengths, /* param lengths */ 
     paramFormats, /* default to all text params */ 
     1);    /* return type, 1 for text. */ 

res = PQexec(conn,"Select * from \"plate_images\" WHERE ...."); /*returns 1 tuple : something/something/image(bytea) */ 

int lengthOfPlateImage=PQgetlength(res,0,2); // indicates 117148 bytes, exactly 2 times of sent data +2 

我很感激,如果你们帮助我。我对寻找它的原因感到厌倦。

在此先感谢。

编辑:我跟踪存储在磁盘和插入​​的数据的大小是相同的(58573个字节)的数据。同时获得这两次大数据变成...

回答

2

好了,用“PQexec的”命令进行的查询返回文本格式的价值和它没有任何参数来告诉你想要的结果以文本格式或字节。我不确定是否存在更好更合适的命令来查询它,但是我使用了“PQexecParams”并设置返回类型1(1表示字节,0表示文本),并返回了具有预期大小的确切数据。无论如何,谢谢。