offfff

[MySQL C API] 9. 데이터베이스에 저장된 이미지 가져오기(Selecting images from MySQL database) 본문

프로그래밍

[MySQL C API] 9. 데이터베이스에 저장된 이미지 가져오기(Selecting images from MySQL database)

offfff 2016. 8. 19. 09:00

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/