oracle 中的大對象數據類型blob、clob、nclob的意義以及區別

           這些天一直在試圖把一個用Oracle數據庫做的項目轉換爲用msSql2000數據庫的,本以爲只要把數據庫的連接池改改就可以了,沒想到事實並沒那麼簡單~ 要改的地方有好多,改了幾天,也學了幾天,今天又學到一個:在我的程序中有這樣的SQL語句:

sql = "insert into tab_publish_template(id, name, language, content, filename, editor, editime, priority, remark) "
          
+ " values(" + myId + ","
          
+ "'" + Common.toSql(myName) + "',"
          
+ "'" + Common.toSql(myLanguage) + "'," 
          
+ "empty_clob(),"
          
+ "'N/A',"
          
+ "'" + Common.toSql(myEditor) + "',"
          
+ "SYSDATE,"
          
+ myPriority + ","
          
+ mySqlRemark
          
+ ")";
stmt.executeUpdate(sql);
//處理CLOB型數據  --- oracle 數據庫
      sql = "select content from tab_publish_template where id=" + myId + " for update";
      rs 
= stmt.executeQuery(sql); 
      
if (rs.next()) 
      

            
//oracle.sql.CLOB clob = (oracle.sql.CLOB)rs.getClob("content");
            String clob = rs.getString("content");
            clob.putString(
1, myContent);
            sql 
= "update tab_publish_template set content=? where id=" + myId;
            PreparedStatement pstmt 
= conn.prepareStatement(sql);
            pstmt.setClob(
1, clob);
            pstmt.executeUpdate();
            pstmt.close();
      }

      rs.close();
      rs 
= null;

沒有看懂 empty_clob() 這個是幹什麼的,在原來的oracle 數據庫腳本中找到content 字段的類型是 clob  型的,只看腳本,我只能理解是這個字段重要放很多,很長的數據,要足夠大,於是就想在sql2000 中找到同樣的字段類型,但是很不幸:沒得~    於是就搜了一大堆資料出來~ 最後也看個一知半解得了吧~  貼上來,給需要的朋友一起討論:(採用)

一、請問clob   和blob是什麼意思?

答:1,他們都是oracle數據庫中的大對象數據類型,oracle提供專門的包對其操作。

        2,blob、clob、nclob   三種大型對象(LOB),用來保存較大的圖形文件或帶格式的文本文件,如Miceosoft   Word文檔,以及音頻、視頻等非文本文件,最大長度是4GB。  

        LOB有幾種類型,取決於你使用的字節的類型,Oracle   8i實實在在地將這些數據存儲在數據庫內部保存。  
  可以執行讀取、存儲、寫入等特殊操作  
   
       CLOB(Character   Large   Object)    用於存儲對應於數據庫定義的字符集的字符數據。(類似於long類型)  
   
        BLOB(Binary   Large   Object)   可用來存儲無結構的二進制數據。(類似於row和long   row)

二、請問LOB的BLOB、CLOB、BFILE有什麼區別,都用在什麼情況?怎樣操作?

答:

BLOB   ——內部二進制大對象。   
CLOB  ——內部字符大對象。   
NCLOB   ——內部定長多字節字符大對象。   
BFILE   ——外部二進制文件。      
  LOB  由兩部分組成:數據(值)和指向數據的指針(定位器)。儘管值與表自身一起存儲,但是一個LOB 列並不包含值,僅有它的定位指針。更進一步,爲了使用大對象,程序必須聲 明定位器類型的本地變量。你將在本章後面見到P   L   /   S   Q   L   接口使用定位器如同操作系統的文件 處理一樣。當LOB(除了BFILE  )被創建時,定位器被存放在列中,值被存放在LOB 段中,  LOB  段是在數據庫內部表的一部分。當BFILE  被創建時,定位器如同平常一樣存儲在列中

三、blob和clob最大是多少?還是沒有最大限制?

答:它們的最大上限就是4G,   Clob可以存儲單字節字符數據,Blob可以存儲無結構的二進制數據

[附加]  不想另開一篇了,就加在這裏了,一個關於SQL2000的問題

sql2000中某字段長度不夠爲何會填上空格?

答:sql2000中char型是固定長度的,如固定長度爲10,但是隻錄入了3個字符,那麼剩下7位就要補充空格來填滿。如果,你不想讓他自動補充空格,可以選用varchar型,這個是實際長度,也很好用,速度也快,PS:oracle中如果可以用varchar2的地方就不要用clob ,因爲後者的速度確實不怎麼好。

        以上是今天工作的收穫~  不大,但是可以積少成多。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章