상세 컨텐츠

본문 제목

ORACLE에서 BLOB 사용 하기

C#

by xarfox 2011. 4. 15. 16:32

본문

===================================================================================
================================ BLOB DATA INSERT ===============================
===================================================================================
1. BLOB 입력을 위해서는, empty_blob() 이 INSERT 되어 있던가,
  default empty_blob()으로 컬럼이 설정되어 있어야 한다.

CREATE TABLE BLOB_TEST
(
SEQ NUMBER,
DATANAME VARCHAR2(50),
DATA BLOB DEFAULT empty_blob()
);

또는,

INSERT INTO tablename VALUES (1,'TEST.txt',empty_blob());

------------------------------------------------------------------------------------

ORACLE에서는 대소문자를 가리지 않는 것으로 알고 있었는데 empty_blob()는 소문자로 입력을해야 한다.

2. BLOB 컬럼을 SELECT하여 OutputStream 객체로 받아 OutputStream.write()를 하면 저장이 된다.

import oracle.sql.*;

..

...

ResultSet orclRs = null;

OutputStream os = null;

byte[] dataBuffer= null;

...

...

dataBuffer = .... <- 파일을 읽어 저장한다.

...

...

String sql = "SELECT DATA FROM BLOB_TEST WHERE SEQ = 1";

orclRs = stmt.executeQuery(sql);

orclRs.next();

BLOB blob = (oracle.sql.BLOB)oclRs.getBlob("DATA");

os = blob.getBinaryOutputStream();

os.write(dataBuffer);

os.close();

...

...

------------------------------------------------------------------------------------

제목은 INSERT이라고 했지만 INSERT부분은 1번 부분이고 2번은 입력이라기 보다는 갱신(UPDATE)에 가깝다. 하지만 데이터를 처음 입력하는 거니 입력이라고 해도 무방할듯..-_-;;

 

 

===================================================================================
================================ BLOB DATA SELECT ==============================
===================================================================================

1. 조회를 하기 위해서는 dbms_lob.getlength()를 사용하면된다.

SELECT dbms_lob.getlength(DATA) FROM BLOB_TEST WHERE SEQ = 1

------------------------------------------------------------------------------------

dbms_lob.getlength()를 사용하면 저장된 파일의 크기가 나온다. 바이너리파일이니 크기말고는 표시할게 없기는 하지만.. ;;;

 

2. BLOB 타입의 데이터를 조회하여 다시 파일로 저장하려면 입력때와 마찬가지로 I/O객체로 받아 파일로 저장하면 된다.

 

...

...

InputStream is = null;

...

...

String sql = "SELECT DATA FROM BLOB_TEST WHERE SEQ = 1";

orclRs = stmt.executeQuery(sql);

orclRs.next(); 

BLOB blob = (oracle.sql.BLOB)oclRs.getBlob("DATA");

is = blob.getBinaryStream();

dataBuffer = new byte[4096];

while (is.read(dataBuffer) != -1)

{

  // 파일로 저장 또는 StringBuffer를 사용하여 StringBuffer 객체에 저장해도 됨.

  // 원하는데로 마음것 저장하자.

}

is.close();

...

...

------------------------------------------------------------------------------------

관련글 더보기