程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> 展示JDBC存取大型數據對象LOB情況的示范類

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

編輯:關於JAVA

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

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);
  }
}

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved