1. 程式人生 > >Oracle資料庫儲存圖片的資料型別

Oracle資料庫儲存圖片的資料型別

Oracle可使用CLOB與BLOB來儲存。其二者的定義與區別

CLOB 定義

  資料庫中的一種儲存檔案所使用的型別。

  Character Large Object

  SQL 型別 CLOB 在 JavaTM 程式語言中的對映關係。SQL CLOB 是內建型別,它將字元大物件 (Character Large Object) 儲存為資料庫表某一行中的一個列值。預設情況下,驅動程式使用 SQL locator(CLOB) 實現 Clob 物件,這意味著 CLOB 物件包含一個指向 SQL CLOB 資料的邏輯指標而不是資料本身。Clob 物件在它被建立的事務處理期間有效。

  在一些資料庫系統裡,也使用Text 作為CLOB的別名,比如SQL Server

BLOB的含義

  BLOB (binary large object),二進位制大物件,是一個可以儲存二進位制檔案的容器。

  在計算機中,BLOB常常是資料庫中用來儲存二進位制檔案的欄位型別。

  BLOB是一個大檔案,典型的BLOB是一張圖片或一個聲音檔案,由於它們的尺寸,必須使用特殊的方式來處理(例如:上傳、下載或者存放到一個數據庫)。

  根據Eric Raymond的說法,處理BLOB的主要思想就是讓檔案處理器(如資料庫管理器)不去理會檔案是什麼,而是關心如何去處理它。

但也有專家強調,這種處理大資料物件的方法是把雙刃劍,它有可能引發一些問題,如儲存的二進位制檔案過大,會使資料庫的效能下降。在資料庫中存放體積較大的多媒體物件就是

應用程式處理BLOB的典型例子。

CLOB和BLOB的區別

  CLOB使用CHAR來儲存資料。 如:儲存XML文件。

       BLOB就是使用二進位制儲存資料。 如:儲存點陣圖。

JAVA裡面對CLOB的操作

  在絕大多數情況下,使用2種方法使用CLOB

  1 相對比較小的,可以用String進行直接操作,把CLOB看成字串型別即可

  2 如果比較大,可以用 getAsciiStream 或者 getUnicodeStream 以及對應的 setAsciiStream 和 setUnicodeStream 即可

  讀取資料

  ResultSet rs = stmt.executeQuery("SELECT TOP 1 * FROM Test1");

  rs.next();

  Reader reader = rs.getCharacterStream(2);

  插入資料

  PreparedStatement pstmt = con.prepareStatement("INSERT INTO test1 (c1_id, c2_vcmax) VALUES (?, ?)");

  pstmt.setInt(1, 1);

  pstmt.setString(2, htmlStr);

  pstmt.executeUpdate();

  更新資料

  Statement stmt = con.createStatemet();

  ResultSet rs = stmt.executeQuery("SELECT * FROM test1");

  rs.next();

  Clob clob = rs.getClob(2);

  long pos = clob.position("dog", 1);

  clob.setString(1, "cat", len, 3);

  rs.updateClob(2, clob);

  rs.updateRow();

BLOBCLOB都是大欄位型別,BLOB是按二進位制來儲存的,而CLOB是可以直接儲存文字的。其實兩個是可以互換的的,或者可以直接用LOB欄位代替這兩個。但是為了更好的管理ORACLE資料庫,通常像圖片、檔案、音樂等資訊就用BLOB欄位來儲存,先將檔案轉為二進位制再儲存進去。而像文章或者是較長的文字,就用CLOB儲存,這樣對以後的查詢更新儲存等操作都提供很大的方便。