Oacle 에서 blob 필드 를 읽 고 쓰 는 문제 분석
먼저 다음 두 개의 테스트 용 데이터베이스 테이블 을 만 듭 니 다.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 유형 필드 에 대한 접근 을 관찰 한 결과 다른 유형 필드 에 비해 다음 과 같은 몇 가지 현저 한 특징 이 있 음 을 알 수 있다.
첫째,자동 제출 을 취소 해 야 합 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
activemq 5.5 의 입문 은 설치, 시작, 데이터베이스 지속 화 를 포함한다Apache ActiveMQ 5.5.0 은 주로 유지보수 버 전 으로 130 개가 넘 는 문 제 를 복 구 했 으 며 대부분 bug 와 개선 이 었 다. Improved performance for offline d...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.