Posted on 2007-03-13 17:29
semovy 閱讀(368)
評論(0) 編輯 收藏 所屬分類:
JDBC
import?java.io.*;
import?java.util.*;
import?java.sql.*;
??
public?class?LobPros
{
??
????/**
?????*?orACLE驅動程序
?????*/
????private?static?final?String?DRIVER?=?"oracle.jdbc.driver.OracleDriver";
??
????/**
?????*?orACLE連接用URL
?????*/
????private?static?final?String?URL?=?"jdbc:oracle:thin:@test2000:1521:orac";
??
????/**
?????*?用戶名
?????*/
????private?static?final?String?USER?=?"user";
??
????/**
?????*?密碼
?????*/
????private?static?final?String?PASSWORD?=?"pswd";
??
????/**
?????*?數據庫連接
?????*/
????private?static?Connection?conn?=?null;
??
????/**
?????*?SQL語句對象
?????*/
????private?static?Statement?stmt?=?null;
??
????/**
?????*?@roseuid?3EDA089E02BC
?????*/
????public?LobPros()
????{
??
????}
??
????/**
?????*?往數據庫中插入一個新的CLOB對象
?????*
?????*?@param?infile?-?數據文件
?????*?@throws?java.lang.Exception
?????*?@roseuid?3EDA04A902BC
?????*/
????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);
????}
??
????/**
?????*?修改CLOB對象(是在原CLOB對象基礎上進行覆蓋式的修改)
?????*
?????*?@param?infile?-?數據文件
?????*?@throws?java.lang.Exception
?????*?@roseuid?3EDA04B60367
?????*/
????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);
????}
??
????/**
?????*?替換CLOB對象(將原CLOB對象清除,換成一個全新的CLOB對象)
?????*
?????*?@param?infile?-?數據文件
?????*?@throws?java.lang.Exception
?????*?@roseuid?3EDA04BF01E1
?????*/
????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);
????}
??
????/**
?????*?CLOB對象讀取
?????*
?????*?@param?outfile?-?輸出文件名
?????*?@throws?java.lang.Exception
?????*?@roseuid?3EDA04D80116
?????*/
????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);
????}
??
????/**
?????*?向數據庫中插入一個新的BLOB對象
?????*
?????*?@param?infile?-?數據文件
?????*?@throws?java.lang.Exception
?????*?@roseuid?3EDA04E300F6
?????*/
????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);
????}
??
????/**
?????*?修改BLOB對象(是在原BLOB對象基礎上進行覆蓋式的修改)
?????*
?????*?@param?infile?-?數據文件
?????*?@throws?java.lang.Exception
?????*?@roseuid?3EDA04E90106
?????*/
????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);
????}
??
????/**
?????*?替換BLOB對象(將原BLOB對象清除,換成一個全新的BLOB對象)
?????*
?????*?@param?infile?-?數據文件
?????*?@throws?java.lang.Exception
?????*?@roseuid?3EDA0505000C
?????*/
????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);
????}
??
????/**
?????*?BLOB對象讀取
?????*
?????*?@param?outfile?-?輸出文件名
?????*?@throws?java.lang.Exception
?????*?@roseuid?3EDA050B003B
?????*/
????public?static?void?blobRead(String?outfile)?throws?Exception
????{
????????/*?設定不自動提交?*/
????????boolean?defaultCommit?=?conn.getAutoCommit();
????????conn.setAutoCommit(false);
??
????????try?{
????????????/*?查詢BLOB對象?*/
????????????ResultSet?rs?=?stmt.executeQuery("Select?BLOBCOL?FROM?TEST_BLOB?Where?ID='222'");
????????????while?(rs.next())?{
????????????????/*?取出此BLOB對象?*/
????????????????oracle.sql.BLOB?blob?=?(oracle.sql.BLOB)rs.getBlob("BLOBCOL");
????????????????/*?以二進制形式輸出?*/
????????????????BufferedOutputStream?out?=?new?BufferedOutputStream(new?FileOutputStream(outfile));
????????????????BufferedInputStream?in?=?new?BufferedInputStream(blob.getBinaryStream());
????????????????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);
????}
??
????/**
?????*?建立測試用表格
?????*?@throws?Exception
?????*/
????public?static?void?createTables()?throws?Exception?{
????????try?{
????????????stmt.executeUpdate("Create?TABLE?TEST_CLOB?(?ID?NUMBER(3),?CLOBCOL?CLOB)");
????????????stmt.executeUpdate("Create?TABLE?TEST_BLOB?(?ID?NUMBER(3),?BLOBCOL?BLOB)");
????????}?catch?(Exception?ex)?{
??
????????}
????}
??
????/**
?????*?@param?args?-?命令行參數
?????*?@throws?java.lang.Exception
?????*?@roseuid?3EDA052002AC
?????*/
????public?static?void?main(String[]?args)?throws?Exception
????{
????????/*?裝載驅動,建立數據庫連接?*/
????????Class.forName(DRIVER);
????????conn?=?DriverManager.getConnection(URL,USER,PASSWORD);
????????stmt?=?conn.createStatement();
??
????????/*?建立測試表格?*/
????????createTables();
??
????????/*?CLOB對象插入測試?*/
????????clobInsert("c:/clobInsert.txt");
????????clobRead("c:/clobInsert.out");
??
????????/*?CLOB對象修改測試?*/
????????clobModify("c:/clobModify.txt");
????????clobRead("c:/clobModify.out");
??
????????/*?CLOB對象替換測試?*/
????????clobReplace("c:/clobReplace.txt");
????????clobRead("c:/clobReplace.out");
??
????????/*?BLOB對象插入測試?*/
????????blobInsert("c:/blobInsert.doc");
????????blobRead("c:/blobInsert.out");
??
????????/*?BLOB對象修改測試?*/
????????blobModify("c:/blobModify.doc");
????????blobRead("c:/blobModify.out");
??
????????/*?BLOB對象替換測試?*/
????????blobReplace("c:/blobReplace.doc");
????????blobRead("c:/bolbReplace.out");
??
????????/*?關閉資源退出?*/
????????conn.close();
????????System.exit(0);
????}
}