新聞中心
OceanBase Connector/J 提供了用于寫入和讀取整個(gè) LOB 內(nèi)容的簡化機(jī)制,稱為數(shù)據(jù)接口。

成都創(chuàng)新互聯(lián)堅(jiān)持“要么做到,要么別承諾”的工作理念,服務(wù)領(lǐng)域包括:網(wǎng)站建設(shè)、成都做網(wǎng)站、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣等服務(wù),滿足客戶于互聯(lián)網(wǎng)時(shí)代的建陽網(wǎng)站設(shè)計(jì)、移動(dòng)媒體設(shè)計(jì)的需求,幫助企業(yè)找到有效的互聯(lián)網(wǎng)解決方案。努力成為您成熟可靠的網(wǎng)絡(luò)建設(shè)合作伙伴!
數(shù)據(jù)接口使用標(biāo)準(zhǔn)的 JDBC 方法(如 getString 和 setBytes)讀取和寫入 LOB 數(shù)據(jù)。使用數(shù)據(jù)接口更易于編碼且速度更快, 但與標(biāo)準(zhǔn) java.sql.Blob、java.sql.Clob 和 java.sql.NClob 接口不同,它不提供隨機(jī)訪問功能,并且訪問數(shù)據(jù)量不能超出 2147483648 個(gè)元素。
Input
OceanBase Connector/J 擴(kuò)展了 PreparedStatement 的 setBytes、setBinaryStream、setString、setCharacterStream 和 setAsciiStream 方法,以增強(qiáng)使用 BLOB、CLOB 和 NCLOB 的能力。
對于服務(wù)器端內(nèi)部驅(qū)動(dòng)程序,當(dāng)前對 SQL 語句(如 INSERT 語句)的操作限制為 4000 字節(jié)。此限制不適用于 PL 語句。INSERT 語句通過包裹在 PL 塊中來解決這一限制,方法如下:
BEGIN
INSERT id, name INTO clob_emp VALUES(?,?);
END
對于大型數(shù)據(jù)共有三種輸入模式,如下所示:
-
直接綁定
此綁定方式的大小受到限制,但效率最高。它將所有輸入列的數(shù)據(jù)內(nèi)聯(lián)在的數(shù)據(jù)塊中,再發(fā)送到服務(wù)器。所有數(shù)據(jù)(包括批處理的多次執(zhí)行)都在單個(gè)網(wǎng)絡(luò)操作中發(fā)送。
-
流綁定
此綁定將數(shù)據(jù)放在末尾。它將批量大小限制為一個(gè),因而可能需要多次往返才能完成。
-
LOB綁定此綁定創(chuàng)建一個(gè)臨時(shí)
LOB,將數(shù)據(jù)復(fù)制到LOB,并綁定LOB定位器。臨時(shí)LOB在執(zhí)行后自動(dòng)釋放。創(chuàng)建臨時(shí)LOB然后寫入LOB的操作需要多次往返。定位器的輸入可以是成批的。
對于 SQL 語句,輸入模式的使用注意事項(xiàng)如下:
-
setBytes和setBinaryStream方法對小于 4001 字節(jié)的數(shù)據(jù)使用直接綁定。 -
setBytes和setBinaryStream方法對大于 4000 字節(jié)的數(shù)據(jù)使用流綁定。 -
setAsciiStream、setBinaryStream和setCharacterStream方法將長參數(shù)作為表單長度,使用長度大于 2147483648 的LOB綁定。未指定長度的表單始終使用LOB綁定。 -
setString、setCharacterStream和setAsciiStream方法對小于 32767 個(gè)字符的數(shù)據(jù)使用直接綁定。 -
setString、setCharacterStream和setAsciiStream方法對大于 32766 個(gè)字符的數(shù)據(jù)使用流綁定。 -
setCharacterStream方法的新形式需要使用long參數(shù)的中作為長度,對大于 2147483647 的長度使用LOB綁定。未指定長度的表單始終使用LOB綁定。
對于 PL 語句,輸入模式的使用注意事項(xiàng)如下:
-
setBytes和setBinary流式方法對小于 32767 字節(jié)的數(shù)據(jù)使用直接綁定。 -
setBytes和setBinaryStream方法對大于 32766 字節(jié)的數(shù)據(jù)使用LOB綁定。 -
setString、setCharacterStream和setAsciiStream方法對數(shù)據(jù)庫字符集中小于 32767 字節(jié)的數(shù)據(jù)使用直接綁定。說明
BLOB無法使用setString來設(shè)置。 -
setString、setCharacterStream和setAsciiStream方法對數(shù)據(jù)庫字符集中大于 32766 字節(jié)的數(shù)據(jù)使用LOB綁定。
自動(dòng)切換輸入模式會影響某些程序。自動(dòng)切換也可能導(dǎo)致附加的服務(wù)器端解析,以適應(yīng)參數(shù)類型的更改。如果重復(fù)執(zhí)行語句時(shí),數(shù)據(jù)大小在閾值上下不斷變化,則將導(dǎo)致性能影響。切換到流模式也會影響批處理。
Output
ResultSet 和 CallableStatement 的 getBytes、getBinaryStream、getString、getCharacterStream 和 getAsciiStream 方法已擴(kuò)展為可與 BLOB、CLOB 或 OUT 參數(shù)一起使用。 這些方法適用于長度小于 2147483648 的任何 LOB。
說明
getString和getNString方法不能用于檢索BLOB列值。
數(shù)據(jù)接口通過訪問驅(qū)動(dòng)程序中的 LOB 定位器進(jìn)行操作,并且對應(yīng)用程序編程是透明的??梢愿鶕?jù)需要使用 LOB 預(yù)取來減少或消除的其他數(shù)據(jù)庫往返行程。
可以使用與 LONG RAW 和 LONG 數(shù)據(jù)相同的流式傳輸機(jī)制來讀取和寫入 BLOB 或 CLOB 數(shù)據(jù)。可以在列上使用 defineColumnType(nn,Types.LONGVARBINARY) 或 defineColumnType(nn,Types.LONGVARCH 方法來讀取數(shù)據(jù),產(chǎn)生直接流,就好像是讀取 LONG RAW 或 LONG 列的數(shù)據(jù)一樣。
CallableSatement 和 IN OUT 參數(shù)
PL 要求用作 IN OUT 參數(shù)輸入和輸出的 Java 類型必須相同。
對于存儲過程的 IN OUT CLOB 參數(shù),希望使用 setString 方法設(shè)置該參數(shù)的值。對于任何 IN 和 OUT 參數(shù),必須對相同的類型進(jìn)行綁定。如果無法確定數(shù)據(jù)大小,則自動(dòng)切換輸入模式會引發(fā)錯(cuò)誤。例如,如果知道輸入數(shù)據(jù)和輸出數(shù)據(jù)都不會大于 32766 字節(jié),則可以對輸入?yún)?shù)使用 setString 方法,并將 OUT 參數(shù)注冊為 Types.VARCHAR,對輸出參數(shù)使用 getString 方法。
更好的解決方案是將存儲過程更改為具有單獨(dú)的 IN 和 OUT 參數(shù)。 如下例所示:
CREATE PROCEDURE clob_obproc( cc IN OUT CLOB );
更改為如下示例:
CREATE PROCEDURE clob_obproc( cc_in IN CLOB, cc_out OUT CLOB );
另一個(gè)解決方法是使用容器塊進(jìn)行調(diào)用。clob_plproc 存儲過程可以用 Java 字符串包裝,以用于 prepareCall 語句,如下所示:
"DECLARE cc_temp; BEGIN cc_temp := ?; clob_plproc( cc_temp); ? := cc_temp; END;"
無論哪種情況,都可以在第一個(gè)參數(shù)上使用 setString 方法,在第二個(gè)參數(shù)上使用 registerOutParameter 方法和 Types.CLOB。
大小限制
如果創(chuàng)建非常大的 byte 數(shù)組或 String 可能會對 Java 內(nèi)存管理系統(tǒng)的性能產(chǎn)生影響。閱讀 Java 虛擬機(jī)(JVM)供應(yīng)商提供的有關(guān)大量數(shù)據(jù)元素影響內(nèi)存管理的相關(guān)信息,并考慮改用流接口。
當(dāng)前名稱:創(chuàng)新互聯(lián)OceanBase教程:OceanBaseLOB數(shù)據(jù)接口
本文來源:http://m.fisionsoft.com.cn/article/djhpies.html


咨詢
建站咨詢
