복잡할것 같아서 링크로 대체합니다.
http://www.sqlite.org/cvstrac/wiki?p=BlobExample
설명을 드리자면..
요즘 데이터베이스에는 바이너리 파일들을 데이터베이스 안에 집어 넣을수 있는 기능이 있습니다. 그것을 BLOB(Binary Large OBject) 모드라고 부릅니다.
여러분들이 사용하는 JPEG 파일이 몇개 있다고 가정해보겠습니다.
대부분의 경우 JPEG 파일은 어느 디렉토리에 저장되어 있을 것이고, 데이터베이스에는 그 파일이 저장된 경로명만을 저장하는게 보통입니다.
하지만 어떤 문제가 생겨서 지정된 경로명에 그 파일이 지워졌거나 깨졌다고 하면 데이터베이스에 들어 있는 경로명은 더 이상 유효하지 않은 정보가 됩니다.
즉, 들어있는 정보가 정확하지 않은 가짜 데이터가 들어간 셈이 되지요. 이런것을 일컬어 데이터베이스에서는 무결성이 깨졌다고 표현합니다.
이런 오류를 방지하기 위해서 실제의 바이너리 데이터를 데이터베이스안에 직접 집어 넣는 기능이 등장했습니다. 그것이 바로 BLOB이라는 겁니다.
위의 링크에 사용된 예제도 SQLite 에서 사용하고 있는 BLOB의 전형적인 방법을 보여줍니다.
원하는 바이너리 파일을 데이터베이스안에 집어 넣은 다음, 다시 꺼내서 원래의 파일로 복구하는 거지요.
저는 위의 링크를 참조해서 바이너리 파일대신 영수증 출력내역을 저장했다가 영수증을 재발행 하는 기능에서 유용하게 써먹었습니다. 시리얼 포트로 연결하는 열전사 프린터였는데 아시다시피 영수증 출력 데이터에는 글자말고도 프린터들을 제어하는 코드(글자확대, 라인피드, 영수증 컷팅, ...)들이 들어 있거든요.
이걸 저장했다가 다시 불러들이는데는 BLOB모드가 아주 유용했습니다.
참고가 되시길 바랍니다.