W3Cschool
恭喜您成為首批注冊(cè)用戶
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
某些類型的結(jié)果集對(duì)于某些查詢是不適用的。如果為運(yùn)行的查詢指定了不可用的結(jié)果集類型或并發(fā)類型,則 OceanBase Connector/J 將遵循相應(yīng)的規(guī)則來確定最佳可行類型。
實(shí)際的結(jié)果集類型和并發(fā)類型是在運(yùn)行語句時(shí)確定的,如果所需的結(jié)果集類型或并發(fā)類型不可用,則驅(qū)動(dòng)程序?qū)⒃谡Z句對(duì)象上發(fā)出 SQLWarning
。SQLWarning
對(duì)象包含該請(qǐng)求類型不可用的原因。檢查警告以驗(yàn)證您是否收到了所需的結(jié)果集類型。
對(duì)結(jié)果集的查詢具有以下限制。不遵循這些準(zhǔn)則將導(dǎo)致 OceanBase Connector/J 選擇備用結(jié)果集類型或并發(fā)類型。
生成可更新的結(jié)果集的限制:
查詢只能從單個(gè)表中選擇,并且不能包含任何聯(lián)接操作。另外,為了執(zhí)行插入操作,查詢必須選擇所有不可為空的列以及所有沒有默認(rèn)值的列。
查詢不能使用 SELECT *
。
查詢必須僅選擇表列。不能選擇派生的列或聚合,例如一組列的 SUM
或 MAX
。
生成對(duì)回滾敏感的結(jié)果集的限制:
查詢不能使用 SELECT *
。
查詢只能從單個(gè)表中選擇。
可回滾和可更新的結(jié)果集不能有 Stream
列。當(dāng)服務(wù)器必須提取 Stream
列時(shí),會(huì)將讀取大小減為 1,并阻塞 Stream
列之后的所有列,直到讀取到 Stream
列為止。結(jié)果為無法批量獲取列和滾動(dòng)瀏覽。
作為 SELECT *
限制的一種解決方法,可以使用表別名,如以下示例所示:
SELECT tab.* FROM TABLE tab ...
可以通過一種簡(jiǎn)單的方法來確定查詢是否可能生成回滾敏感或可更新的結(jié)果集:如果可以合法地將 ROWID
列添加到查詢列表中,則該查詢可能為對(duì)回滾敏感或可更新的結(jié)果集。
如果指定的結(jié)果集類型或并發(fā)類型不可用,那么 OceanBase Connector/J 將根據(jù)以下規(guī)則選擇備用類型:
如果指定的結(jié)果集類型為 TYPE_SCROLL_SENSITIVE
,驅(qū)動(dòng)程序無法滿足該請(qǐng)求,則將嘗試降級(jí)為 TYPE_SCROLL_INSENSITIVE
。
如果指定或降級(jí)的結(jié)果集類型為 TYPE_SCROLL_INSENSITIVE
,驅(qū)動(dòng)程序無法滿足該請(qǐng)求,則將嘗試降級(jí)為 TYPE_FORWARD_ONLY
。
如果指定的并發(fā)類型為 CONCUR_UPDATABLE
,驅(qū)動(dòng)程序無法滿足該請(qǐng)求,則將嘗試降級(jí)為 CONCUR_READ_ONLY
。
說明
OceanBase Connector/J 對(duì)結(jié)果集類型和并發(fā)類型的任何操作都是相互獨(dú)立的。
運(yùn)行查詢后,可以通過在結(jié)果集對(duì)象上調(diào)用方法來驗(yàn)證 OceanBase Connector/J 實(shí)際使用的結(jié)果集類型和并發(fā)類型。
int getType() throws SQLException
此方法返回用于查詢的結(jié)果集類型的 int
值。ResultSet.TYPE_FORWARD_ONLY
、ResultSet.TYPE_SCROLL_SENSITIVE
或 ResultSet.TYPE_SCROLL_INSENSITIVE
是可能的值。
int getConcurrency() throws SQLException
此方法返回用于查詢的并發(fā)類型的 int
值。ResultSet.CONCUR_READ_ONLY
或 ResultSet.CONCUR_UPDATABLE
是可能的值。
以下是有關(guān) OceanBase Connector/J 可更新結(jié)果集的注意事項(xiàng):
不對(duì)可更新結(jié)果集強(qiáng)制執(zhí)行寫鎖定。
不檢查與結(jié)果集 DELETE
或 UPDATE
操作的沖突。
如果您嘗試對(duì)另一個(gè)提交事務(wù)的行執(zhí)行 DELETE
或 UPDATE
操作,則會(huì)發(fā)生沖突。
OceanBase Connector/J 使用 ROWID
唯一標(biāo)識(shí)數(shù)據(jù)庫(kù)表中的一行。只要驅(qū)動(dòng)程序嘗試向數(shù)據(jù)庫(kù)發(fā)送 UPDATE
或 DELETE
操作時(shí) ROWID
是有效的,該操作就會(huì)運(yùn)行。
驅(qū)動(dòng)程序?qū)⒉粫?huì)報(bào)告其他已提交事務(wù)所做的任何更改。任何沖突都將被忽略,并且您的更改將覆蓋以前的更改。
為避免此類沖突,請(qǐng)?jiān)谶\(yùn)行生成結(jié)果集的查詢時(shí)使用 FOR UPDATE
功能。這將避免沖突,但也將阻止同時(shí)訪問數(shù)據(jù)。數(shù)據(jù)項(xiàng)只能同時(shí)保留一個(gè)寫鎖。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號(hào)-3|閩公網(wǎng)安備35020302033924號(hào)
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號(hào)
聯(lián)系方式:
更多建議: