狂淘

          www.kuangtao.net

             :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
            6 隨筆 :: 185 文章 :: 68 評論 :: 0 Trackbacks

          package eg;  
          import java.io.*;  
          import java.sql.*;  
          public class BlobClobExample {  
           
              public static void main(String[] args) {  
                  Connection conn = null;  
                  try {  
                      conn = JDBCUtils.getConnection(); // 建立連接  
                      Statement s = conn.createStatement(); // 創建Statement對象  
                      s.executeUpdate("drop table documents");  
                      // 這句是為了避免再次創建表documents  
                      s  
                              .executeUpdate("CREATE TABLE documents(id INT, text CLOB(64 K) , photo Blob(1440 K))");  
                      // 以上就是創建包含Clob和Blob對象的表的過程  
                      // 和將一般的字段差不多,后面括號中代表該對象的大小,其語法為:  
                      // CLOB (length [{{K |M |G}]) 表示長度為K、M、G等,沒有帶表示比特  
                      conn.commit(); // 提交操作  
                      // 以下是將本地文件中,本程序的源文件加載為一個流,用于向數據庫中寫入Clob字段  
                      File file1 = new File("BlobClobExample.java");  
                      int len1 = (int) file1.length();  
                      InputStream fis1 = new java.io.FileInputStream(file1);  
                      // 以下是將當前源代碼目錄的子目錄“11”下的“1.JPG”文件加載為一個流,  
                      // 用于后面向數據庫中寫入Blob字段  
                      File file2 = new File("c:\\11\\1.JPG");  
                      int len2 = (int) file2.length();  
                      InputStream fis2 = new FileInputStream(file2);  
                      // 以上兩個簡單吧!!  
                      // 創建一個PreparedStatement對象,用于批量插入內容  
                      // 使用PreparedStatement對象可以節省,數據庫編譯SQL指令的時間,  
                      // 因為在使用PreparedStatement對象時,該SQL語句是預先編譯好了,  
                      // 對于某些變化的參數使用占位符(Place Holder)代替  
                      // 這對于以后將要執行多次的同一操作,該操作僅僅是參數不同,是極其有利  
                      // 比如在網頁上輸入客戶信息時,用戶要填入的數據基本是一樣的(你可以填也可以不填)  
                      // 這時后臺的數據庫可以使用PreparedStatement對象,每次都是設置參數,執行操作  
                      PreparedStatement ps = conn  
                              .prepareStatement("INSERT INTO documents VALUES (?, ?,?)");  
                      ps.setInt(1, 250);  
                      ps.setAsciiStream(2, fis1, len1);  
                      ps.setBinaryStream(3, fis2, len2);  
                      // 以上三步是設置占位符的數值  
                      ps.execute(); // 執行操作  
                      // 以上四步可以重復執行。PreparedStatement就是為了適用于此用途  
                      conn.commit();  
                      // 以上完成了數據的寫入  
                      // 以下是數據的讀出  
                      ResultSet rs = s  
                              .executeQuery("SELECT text , photo FROM documents WHERE id = 250");  
                      while (rs.next()) {  
                          Clob aclob = rs.getClob(1); // 和提取一般對象一樣  
                          InputStream is = rs.getAsciiStream(1); // 特殊的,對于與得到Clob的流  
                          // 這是得到Clob、Blob流的第一種方法  
                          // 以下是對流進行處理的過程。Clob本身是包含大字符的對象  
                          // 順其自然,以下是使用java IO中讀取字符流的方法讀取它  
                          BufferedReader br = new BufferedReader(  
                                  new InputStreamReader(is));  
                          String line = null;  
                          while (null != (line = br.readLine())) {  
                              System.out.println(line); // 將其輸出至屏幕,實際你可以按照需要處理  
                          }  
                          is.close();  
                          java.sql.Blob ablob = rs.getBlob(2); // 和操作其它基本類型的字段一樣  
                          System.out.println(ablob.length()); // 簡單地操作Blob的實例  
                          // 實際你可以使用Clob的API對其進行任何它允許的操作,請查API  
                          InputStream bis = ablob.getBinaryStream(); // 得到Blob實例的字節流  
                          // 這是操作Clob、Blob等對象的第二種方法,也是最自然的用法  
                          OutputStream os = new FileOutputStream("11.jpg");  
                          // 用于將數據庫中的Blob存放到目前目錄的“11.jpg”文件中  
                          int b = bis.read(); // 以下就是象操作其它java字節流一樣操作了  
                          while (b != -1) {  
                              os.write((char) b);  
                              b = bis.read();  
                          }  
                          os.flush();  
                          os.close();  
                          bis.close();  
                      }  
           
                  } catch (Exception e) {  
                      e.printStackTrace();  
                  } finally {  
                      if (conn != null)  
                          conn.close();  
                  }  
           
              }  


          本文來自CSDN博客,轉載請標明出處:http://blog.csdn.net/zhangxs_3/archive/2009/03/22/4014308.aspx

          posted on 2009-08-25 13:06 狂淘 閱讀(950) 評論(0)  編輯  收藏 所屬分類: oracle
          主站蜘蛛池模板: 图木舒克市| 佛教| 巩留县| 中牟县| 咸宁市| 德钦县| 西安市| 噶尔县| 丰宁| 高邮市| 嘉荫县| 安丘市| 六枝特区| 邛崃市| 永仁县| 洪泽县| 巴马| 电白县| 博白县| 宁城县| 呈贡县| 辽宁省| 奉节县| 西乌珠穆沁旗| 延寿县| 梁平县| 抚宁县| 瓦房店市| 成安县| 卓资县| 汝州市| 茂名市| 元朗区| 安国市| 凉城县| 平泉县| 离岛区| 堆龙德庆县| 永昌县| 芷江| 崇左市|