簡體   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