[英]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.