<x:batch>

x:batch 動作用來為 JSP SQL 動作分組。執行這個動作的原因有兩種。 一個原因是要延遲處理一組 x:updateRowx:insertRowx:deleteRow 動作,直到它們全部指定好為止。另一個原因是要讓一組動作使用相同的資料庫連線。

語法

如果您的 JSP 頁面要使用 x:repeat 元素內的 x:insertRowx:deleteRow 動作, 您必須將 x:repeat 元素放在 x:batch 動作的主體內,才能得到正確的結果。如果沒有這麼做,可能會更新或刪錯列,或使列插入錯誤位置。x:insertRowx:deleteRow 動作會改變結果集中後續列的編號。藉由延遲這些動作,您可以利用現行列號來將它們的目標鎖定在各列上。 直到 x:batch 結束所有動作都處理好之後,列號才會改變。

您可以將任何動作放在 x:batch 內,但只有 x:updateRowx:insertRowx:deleteRow 動作會延遲。您也可以將不同的 DBSelectDBProcedureCall Bean 所適用的動作放在 x:batch 內。

x:batch 內的所有動作都是利用相同的資料庫連線來執行的。 您可以選用地指定所有批次動作都應在相同資料庫交易內進行,且在結束之前,不進行任何確定。如果在這項交易期間發生 DataException,就會執行回復,而不執行確定。

<x:batch	 
		connectionSpec = "connectionSpec_id"
		connectionSpecRef = "connectionSpecRef"
		singleTransaction = "true|false">
</x:batch>

x:batch 動作有下列屬性:

connectionSpec
這是 x:dataSourceSpecx:driverManagerSpec 動作的 ID。這個值會區分大小寫,且必須符合在範圍內的 connectionSpec 動作。

所參照的動作會提供建立資料庫連線所需要的資訊。 所有批次動作都是利用相同連線來執行的。 如果您在 x:batch 內的任何動作中指定 connectionSpec 屬性,就會出現錯誤的旗標。

connectionSpecRef
這是一個指向 DBConnectionSpec 物件的參照,用來取得建立連線所需要的資訊。

您可以指定 connectionSpec 或 connectionSpecRef,但不能同時指定這兩者。

singleTransaction
指定應不應在單一資料庫交易範圍內執行 x:batch 內的所有動作。如果使用 false 值,在每個批次動作之後,都會進行隱含的確定。如果使用預設值 true,在完成所有批次動作之前,不會執行任何確定動作。

x:batch 動作的主體中,可以有任何 JSP SQL 標示。下列動作會被延遲:

範例

這個範例會在 select1 所產生的結果集各列中進行疊代。 如果檢查到名稱為 delete 的索引化要求參數,就會將這列刪除。

<x:batch connectionSpec= "conn1">
	<x:repeat name="select1" over="rows"
index="rowNumber">
		<% if (request.getParameter("delete"+rowNumber)!= null)
			{ %><x:deleteRow />
		<% } %>
	</x:repeat>
</x:batch>									

這個範例會從 select1 所產生的結果集中刪除一列,再插入一列到 select2 所產生的結果集中。使用 x:batch 可讓這個動作在單一資料庫交易內完成。

<x:batch connectionSpec="conn1"
singleTransaction="true">
	<x:deleteRow name="select1"/>
	<x:insertRow name="select2"/>
</x:batch>									
讀者意見
(C) Copyright IBM Corporation 2000, 2005. All Rights Reserved.