繁体   English   中英

使用libpq库将图像发送到Postgresql数据库中的bytea列的错误

[英]Error about sending an image into bytea column in postgresql db with libpq library

我在C中进行编码,并使用Postgresql的Libpq库,我想将PNG图像以“ bytea”类型存储到数据库中。 我已经在网上搜索了好几个小时,却找不到一个很好的例子来处理这项工作,因此想在这里写下来寻求帮助。

我有12个要绑定的参数,其中之一是PNG图像。 其余的都是char *,它们没有问题。

以下是到目前为止我尝试过的。 (我正在编写代码的必要部分):

    PGresult   *res;
    PGconn *conn;

    const char *paramValues[12];
    int         paramLengths[12];
    int         paramFormats[12];

    const char* imageFrame=frameImageArray.data();// frameImageArray.data is const char*.
    int imageSize=frameImageArray.size();

    paramFormats[11]=1;
    paramLengths[11]=imageSize;
    paramValues[11]= imageFrame;


// insertplate is a function on db
    res = PQexecParams(conn,
    "SELECT insertplate($1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11,$12)",
    12,              // param number 
    NULL,            // oid param type 
    paramValues,     // param values
    paramLengths,    // param lengths 
    paramFormats,    // params format, 1 for binary
    1);              //1 for binary result 

它的编译没有问题,但是在运行时将映像存储到db时,会发生经典的运行时错误:

“ ..._ debug.exe中的0x6d3dc220处未处理的异常:0xC0000005:访问冲突读取位置0x000000007f91e508。

似乎与内存处理有关。

无论我尝试什么,都无法使其运行,并且我也看不到我的错误。 我是否必须使用Oids通过PQexecParams将二进制数据发送到db? 还是我想念的其他东西? 如果有人帮助我,我真的很感激。

提前致谢。

编辑:我刚刚意识到,如果我使用Insert语句,它可以很好地工作,但是此功能不能。 通常正常。 奇怪的。

我终于找到了错误。

//paramFormats[0]=0;
//paramFormats[1]=0;
//paramFormats[2]=0;
//paramFormats[3]=0;
//paramFormats[4]=0;
//paramFormats[5]=0;
//paramFormats[6]=0;
//paramFormats[7]=0;
//paramFormats[8]=0;
//paramFormats[9]=0;
//paramFormats[10]=0;
//paramFormats[11]=1;

可以将“参数格式”保留为NULL,但是如上所述,我只想设置“ paramFormats [11]”。 我也将其他设置为0并成功。 我没想到会这样。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM