posts - 0, comments - 77, trackbacks - 0, articles - 356
            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

          JDBC存取ORACLE大型數據對象LOB幾種情況的示范類

          Posted on 2007-03-13 17:29 semovy 閱讀(369) 評論(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);
          ????}
          }
          主站蜘蛛池模板: 彰化县| 淮滨县| 安阳市| 大余县| 西吉县| 房山区| 额尔古纳市| 昂仁县| 延吉市| 凤城市| 阿尔山市| 彰武县| 合水县| 什邡市| 寿光市| 河西区| 东兰县| 长治市| 乐业县| 杭锦后旗| 电白县| 营山县| 平顶山市| 镇安县| 巴林右旗| 广汉市| 会理县| 定兴县| 安泽县| 宜阳县| 招远市| 团风县| 临颍县| 苍山县| 闽清县| 元氏县| 双柏县| 长垣县| 通辽市| 平武县| 遂川县|