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

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


咨詢
建站咨詢
