gpt4 book ai didi

c - 使用 libpq 库将图像发送到 postgresql 数据库中的 bytea 列时出错

转载 作者:行者123 更新时间:2023-11-30 17:53:45 24 4
gpt4 key购买 nike

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

我有 12 个参数要绑定(bind),其中之一是 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

编译没有问题,但是当在运行时将图像存储到数据库时,会出现经典的运行时错误:

“..._debug.exe 中 0x6d3dc220 处出现未处理的异常:0xC0000005:读取位置 0x000000007f91e508 时发生访问冲突。”

似乎与内存处理有关。

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

提前致谢。

编辑:我刚刚意识到,如果我使用 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 并且有效。我没想到会有这样的事情。

关于c - 使用 libpq 库将图像发送到 postgresql 数据库中的 bytea 列时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15411803/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com