===================================================================================
================================ 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();
...
...
------------------------------------------------------------------------------------
[출처] ORACLE에서 BLOB 사용 하기|작성자 추억