Oacle 에서 blob 필드 를 읽 고 쓰 는 문제 분석

8073 단어 Oacleblob
LOB 유형 은 BLOB 와 CLOB 두 가지 로 나 뉜 다.BLOB 는 바 이 너 리 대형 대상(Binary Large Object)으로 텍스트 가 아 닌 바이트 스 트림 데이터(예 를 들 어 프로그램,이미지,동 영상 등)를 저장 하 는 데 적용 된다.한편,CLOB,즉 문자 형 대형 대상(Character Large Object)은 문자 집합 과 관련 되 고 텍스트 형의 데이터(예 를 들 어 v 역사 파일,대부분 저작 등)를 저장 하기에 적합 하 다.다음은 JDBC 를 통 해 Oracle 데이터베이스 LOB 형식 필드 를 조작 하 는 몇 가지 상황 을 프로그램 인 스 턴 스 로 설명 한다.
먼저 다음 두 개의 테스트 용 데이터베이스 테이블 을 만 듭 니 다.Power Designer PD 모델 은 다음 과 같 습 니 다.
작성 표 SQL 문 구 는:CREATE TABLE TESTCLOB ( ID NUMBER(3), CLOBCOL CLOB)CREATE TABLE TEST_BLOB ( ID NUMBER(3), BLOBCOL BLOB)
1.CLOB 대상 의 액세스
1.데이터베이스 에 새로운 CLOB 이미지 삽입

public static void clobInsert(String infile) throws Exception
{
/* */
boolean defaultCommit = conn.getAutoCommit();
conn.setAutoCommit(false);

try {
/* CLOB */
stmt.executeUpdate("INSERT INTO TEST_CLOB VALUES ('111', EMPTY_CLOB())");
/* CLOB */
ResultSet rs = stmt.executeQuery("SELECT CLOBCOL FROM TEST_CLOB WHERE ID='111' FOR UPDATE");
while (rs.next()) {
/* CLOB */
oracle.sql.CLOB clob = (oracle.sql.CLOB)rs.getClob("CLOBCOL");
/* CLOB */
BufferedWriter out = new BufferedWriter(clob.getCharacterOutputStream());
BufferedReader in = new BufferedReader(new FileReader(infile));
int c;
while ((c=in.read())!=-1) {
out.write(c);
}
in.close();
out.close();
}
/* */
conn.commit();
} catch (Exception ex) {
/* */
conn.rollback();
throw ex;
}

/* */
conn.setAutoCommit(defaultCommit);
}

2.CLOB 대상 수정(원래 CLOB 대상 을 바탕 으로 커버 식 수정)

public static void clobModify(String infile) throws Exception
{
/* */
boolean defaultCommit = conn.getAutoCommit();
conn.setAutoCommit(false);

try {
/* CLOB */
ResultSet rs = stmt.executeQuery("SELECT CLOBCOL FROM TEST_CLOB WHERE ID='111' FOR UPDATE");
while (rs.next()) {
/* CLOB */
oracle.sql.CLOB clob = (oracle.sql.CLOB)rs.getClob("CLOBCOL");
/* */
BufferedWriter out = new BufferedWriter(clob.getCharacterOutputStream());
BufferedReader in = new BufferedReader(new FileReader(infile));
int c;
while ((c=in.read())!=-1) {
out.write(c);
}
in.close();
out.close();
}
/* */
conn.commit();
} catch (Exception ex) {
/* */
conn.rollback();
throw ex;
}

/* */
conn.setAutoCommit(defaultCommit);
}

3.CLOB 쌍 상 교체(원래 CLOB 쌍 상 제거,새로운 CLOB 쌍 상 으로 변경)

public static void clobReplace(String infile) throws Exception
{
/* */
boolean defaultCommit = conn.getAutoCommit();
conn.setAutoCommit(false);

try {
/* CLOB */
stmt.executeUpdate("UPDATE TEST_CLOB SET CLOBCOL=EMPTY_CLOB() WHERE ID='111'");
/* CLOB */
ResultSet rs = stmt.executeQuery("SELECT CLOBCOL FROM TEST_CLOB WHERE ID='111' FOR UPDATE");
while (rs.next()) {
/* CLOB */
oracle.sql.CLOB clob = (oracle.sql.CLOB)rs.getClob("CLOBCOL");
/* */
BufferedWriter out = new BufferedWriter(clob.getCharacterOutputStream());
BufferedReader in = new BufferedReader(new FileReader(infile));
int c;
while ((c=in.read())!=-1) {
out.write(c);
}
in.close();
out.close();
}
/* */
conn.commit();
} catch (Exception ex) {
/* */
conn.rollback();
throw ex;
}

/* */
conn.setAutoCommit(defaultCommit);
}

4、CLOB 대상 읽 기

public static void clobRead(String outfile) throws Exception
{
/* */
boolean defaultCommit = conn.getAutoCommit();
conn.setAutoCommit(false);

try {
/* CLOB */
ResultSet rs = stmt.executeQuery("SELECT * FROM TEST_CLOB WHERE ID='111'");
while (rs.next()) {
/* CLOB */
oracle.sql.CLOB clob = (oracle.sql.CLOB)rs.getClob("CLOBCOL");
/* */
BufferedReader in = new BufferedReader(clob.getCharacterStream());
BufferedWriter out = new BufferedWriter(new FileWriter(outfile));
int c;
while ((c=in.read())!=-1) {
out.write(c);
}
out.close();
in.close();
}
} catch (Exception ex) {
conn.rollback();
throw ex;
}

/* */
conn.setAutoCommit(defaultCommit);
}

2.BLOB 대상 의 액세스
1.데이터베이스 에 새로운 BLOB 쌍 을 삽입 합 니 다.

public static void blobInsert(String infile) throws Exception
{
/* */
boolean defaultCommit = conn.getAutoCommit();
conn.setAutoCommit(false);

try {
/* BLOB */
stmt.executeUpdate("INSERT INTO TEST_BLOB VALUES ('222', EMPTY_BLOB())");
/* BLOB */
ResultSet rs = stmt.executeQuery("SELECT BLOBCOL FROM TEST_BLOB WHERE ID='222' FOR UPDATE");
while (rs.next()) {
/* BLOB */
oracle.sql.BLOB blob = (oracle.sql.BLOB)rs.getBlob("BLOBCOL");
/* BLOB */
BufferedOutputStream out = new BufferedOutputStream(blob.getBinaryOutputStream());
BufferedInputStream in = new BufferedInputStream(new FileInputStream(infile));
int c;
while ((c=in.read())!=-1) {
out.write(c);
}
in.close();
out.close();
}
/* */
conn.commit();
} catch (Exception ex) {
/* */
conn.rollback();
throw ex;
}
/* */
conn.setAutoCommit(defaultCommit);
}

2.BLOB 대상 수정(원래 BLOB 대상 을 바탕 으로 커버 식 수정)

public static void blobModify(String infile) throws Exception
{
/* */
boolean defaultCommit = conn.getAutoCommit();
conn.setAutoCommit(false);

try {
/* BLOB */
ResultSet rs = stmt.executeQuery("SELECT BLOBCOL FROM TEST_BLOB WHERE ID='222' FOR UPDATE");
while (rs.next()) {
/* BLOB */
oracle.sql.BLOB blob = (oracle.sql.BLOB)rs.getBlob("BLOBCOL");
/* BLOB */
BufferedOutputStream out = new BufferedOutputStream(blob.getBinaryOutputStream());
BufferedInputStream in = new BufferedInputStream(new FileInputStream(infile));
int c;
while ((c=in.read())!=-1) {
out.write(c);
}
in.close();
out.close();
}
/* */
conn.commit();
} catch (Exception ex) {
/* */
conn.rollback();
throw ex;
}

/* */
conn.setAutoCommit(defaultCommit);
}

3.BLOB 쌍 상 교체(원래 BLOB 쌍 상 제거,새로운 BLOB 쌍 상 으로 변경)

public static void blobReplace(String infile) throws Exception
{
/* */
boolean defaultCommit = conn.getAutoCommit();
conn.setAutoCommit(false);

try {
/* BLOB */
stmt.executeUpdate("UPDATE TEST_BLOB SET BLOBCOL=EMPTY_BLOB() WHERE ID='222'");
/* BLOB */
ResultSet rs = stmt.executeQuery("SELECT BLOBCOL FROM TEST_BLOB WHERE ID='222' FOR UPDATE");
while (rs.next()) {
/* BLOB */
oracle.sql.BLOB blob = (oracle.sql.BLOB)rs.getBlob("BLOBCOL");
/* BLOB */
BufferedOutputStream out = new BufferedOutputStream(blob.getBinaryOutputStream());
BufferedInputStream in = new BufferedInputStream(new FileInputStream(infile));
int c;
while ((c=in.read())!=-1) {
out.write(c);
}
in.close();
out.close();
}
/* */
conn.commit();
} catch (Exception ex) {
/* */
conn.rollback();
throw ex;
}

/* */
conn.setAutoCommit(defaultCommit);
}

4.BLOB 대상 읽 기
4.567913.상기 프로그램 이 LOB 유형 필드 에 대한 접근 을 관찰 한 결과 다른 유형 필드 에 비해 다음 과 같은 몇 가지 현저 한 특징 이 있 음 을 알 수 있다.
첫째,자동 제출 을 취소 해 야 합 니 다.

좋은 웹페이지 즐겨찾기