[MySQL C API] 9. 데이터베이스에 저장된 이미지 가져오기(Selecting images from MySQL database)
1. 소스코드
8번 글에서 데이터베이스에 저장한 이미지를 불러오는 소스코드이다.
#include <my_global.h>
#include <mysql.h>
void finish_with_error(MYSQL *con)
{
fprintf(stderr, "%s \n", mysql_error(con));
mysql_close(con);
exit(1);
}
int main(int argc, char **argv)
{
// write binary 모드로 새로운 이미지를 파일을 만듦
FILE *fp = fopen("picture2.jpg", "wb");
if (fp == NULL) {
fprintf(stderr, "cannot open image file \n");
exit(1);
}
MYSQL *con = mysql_init(NULL);
if(con == NULL) {
fprintf(stderr, "mysql_init() failed \n");
exit(1);
}
if (mysql_real_connect(con, "localhost", "user01", "1q2w3e!". "testdb", 0, NULL, 0) == NULL)
{
finish_with_error(con);
}
// Images 테이블 Id 1번 데이터를 SELECT 한다.
if (mysql_query(con, "SELECT Data FROM Images WHERE Id=1"))
{
finish_with_error(con);
}
// SELECT 결과를 MYSQL_RES에 저장
MYSQL_RES *result = mysql_store_result(con);
if (result == NULL) {
finish_with_error(con);
}
// row 에는 raw데이터가 저장되게 됨
MYSQL_ROW row = mysql_fetch_row(result);
// 받아온 이미지데이터의 길이를 알아낸다
unsigned long *lengths = mysql_fetch_lengths(result);
if (lengths == NULL) {
finish_with_error(con);
}
// 파일에 이미지데이터를 데이터의 길이만큼 옮겨 저장
fwrite(row[0], lengths[0], 1, fp);
if (ferror(fp))
{
fprintf(stderr, "fwrite() failed \n");
mysql_free_result(result);
mysql_close(con);
exit(1);
}
int r = fclose(fp);
if (r == EOF) {
fprintf(stderr, "cannot close file handler \n");
}
mysql_free_result(result);
mysql_close(con);
exit(0);
}
아래 링크를 참고하여 번역 및 수정함
http://zetcode.com/db/mysqlc/