'이미지저장'에 해당되는 글 1건

  1. 2007.08.18 [Pro*C] db에 image 저장하기 by pino93
--------------------------------------------------------------------------------
SAMPLE : DB에 IMAGE FILE을 저장
Bulletin no : 10111  
--------------------------------------------------------------------------------

다음은 image file 을 insert 하는 예제입니다.
참고 하십시오.

* 이미지 화일의 Type에는 여러가지 형태가 있다.
예를 들면 BMP, PCX, TIF, ...

이 중에서도 압축 효율이 높은 File의 형태를 선택하는 것이 좋다.
가령 BMP Type보다는 PCX Format이 거의 1/4 정도로 압축을 해주므로 보다 효율
적이다.

* 일단 PC의 Windows의 PaintBrush 또는 Image 처리하는 Tool로써
이미지 화일을 적절한 형태로 처리하여 File로 만들어서 Unix Server로 올린다.

*image file을 저장하기 위해서는 image file이 저장될 column의 data type이
long raw이어야 한다.

* Long Data를 처리하기 위해서는 file size를 알아야하며,  
추후 File의 Size로써 처리해야 하는 일이 있다면, Table에 File의 Size도
저장하는 것이 효율적이다.

* 아래의 프로그램은 Image File을 읽어서 Table에 저장하는 내용이다.  

#include  

typedef char bitmap[56262];            /* file size */
EXEC SQL BEGIN DECLARE SECTION;
  VARCHAR   username[20];
  VARCHAR   password[20];
  EXEC SQL  TYPE bitmap IS LONG RAW(56262) REFERENCE;
  bitmap    buffer;
EXEC SQL END DECLARE SECTION;
EXEC SQL INCLUDE sqlca;

void sqlerror();               /* handles unrecoverable errors */
FILE *fp;
main()
{
      strcpy(username.arr, "SCOTT");
      username.len = strlen(username.arr);
      strcpy(password.arr, "TIGER");
      password.len = strlen(password.arr);

      EXEC SQL WHENEVER SQLERROR DO sqlerror();
      EXEC SQL CONNECT :username IDENTIFIED BY :password;
      EXEC SQL WHENEVER SQLERROR DO sqlerror();

      fp=fopen("xxx.bmp","r");
      fread(&buffer, 1, 56262, fp);

      EXEC SQL INSERT INTO IMAGE VALUES (20, :buffer);
      EXEC SQL COMMIT WORK RELEASE;
}

void sqlerror()
{
  EXEC SQL WHENEVER SQLERROR CONTINUE;
  printf("\nORACLE error detected:\n");
  printf("\n% .70s \n", sqlca.sqlerrm.sqlerrmc);
  EXEC SQL ROLLBACK WORK RELEASE;
  exit(1);
}

- 출처 oraclejava  -

Posted by pino93