私は C でコーディングしており、Postgresql の Libpq ライブラリを使用しています。PNG 画像を「bytea」タイプのデータベースに保存したいと考えています。私は何時間もネットで検索してきましたが、この作業を処理するための良い例を見つけることができなかったので、ここに書いて助けを求めたいと思いました.
バインドするパラメーターは 12 個あり、そのうちの 1 つは 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.」
メモリ処理についての何かのようです。
何を試しても実行できず、エラーも表示されません。PQexecParams でバイナリ データを db に送信するために Oid を使用する必要がありますか? それとも私が行方不明ですか?誰かがこれを手伝ってくれたら本当に感謝しています。
前もって感謝します。
編集: Insert ステートメントを使用するとうまく機能することに気付きましたが、この機能は機能しません。通常は動作します。変。