這些天一直在試圖把一個用Oracle數據庫做的項目轉換爲用msSql2000數據庫的,本以爲只要把數據庫的連接池改改就可以了,沒想到事實並沒那麼簡單~ 要改的地方有好多,改了幾天,也學了幾天,今天又學到一個:在我的程序中有這樣的SQL語句:
+ " 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 ,因爲後者的速度確實不怎麼好。
以上是今天工作的收穫~ 不大,但是可以積少成多。