Я кодируюсь на C и использую библиотеку Libpq Postgresql, и я хотел бы сохранить изображение PNG в базе данных типа «bytea». Я много часов искал в сети и не мог найти хороший пример для обработки этой работы, поэтому хотел написать здесь и обратиться за помощью.Ошибка при отправке изображения в столбцы bytea в postgresql db с библиотекой libpq
У меня есть 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
Она составлена без проблем, но когда дело доходит до хранения изображений в БД во время выполнения, классическая ошибка выполнения встречается,:
«необработанная исключение в 0x6d3dc220 в ..._ debug.exe: 0xC0000005: местоположение чтения нарушения доступа 0x000000007f91e508. "
Кажется, что-то об управлении памятью.
Независимо от того, что я пробовал, я не мог заставить его работать, и я не могу видеть свою ошибку. Должен ли я использовать Oids для отправки двоичных данных в db с помощью PQexecParams? Или что-то еще мне не хватает? Я очень ценю, если кто-нибудь поможет мне в этом.
Заранее спасибо.
Редактирование: Я просто понял, что если я использую инструкцию Insert, она работает хорошо, но эта функция не работает. Обычно это работает. Weird.
Этот фрагмент кода выглядит отлично. NULL в 'paramTypes' документирован для работы. Я бы искал причину сбоя в других параметрах, предполагая, что 'imageSize' и' imageFrame' верны. Также см. [Этот другой вопрос] (http://stackoverflow.com/questions/8994702) для примера на S.O. –
imageSize и imageFrame являются правильными указателями символов для изображений. На самом деле я делаю то же самое с этим примером, но не работаю. Все еще не мог найти причину. Большое спасибо за ваш интерес кстати. – Horizon1710