<x:select>

x:select 動作用來在關聯式資料庫中執行查詢。如果查詢產生不是空的結果集,它的列會快取在應用程式伺服器機器中的快取記憶體內。 其中的一列(剛開始是第一列),一律被視為現行列。

使用這個動作會建立一個 DBSelect Bean,您可以利用 id 屬性指定其名稱的變數來存取這個 Bean。

JSP 動作可利用 DBSelect Bean 的基本功能。您可以利用 x:nextRowx:previousRow 來定位到結果集中的其他列上。您可以利用 x:updateRowx:deleteRowx:insertRow 這些動作來變更結果集中的列,而不需要撰寫其他的 SQL 陳述式。您可以利用 x:getColumnx:setColumn 動作來存取結果集中的直欄值。如果 SQL 陳述式有參數的話,您可以利用 x:getParameterx:parameter 動作來存取它們。

DBSelect Bean 的所有方法都可以利用 Scriptlet 來執行,且它的所有內容都可以利用標準 jsp:getPropertyjsp:setProperty 動作來存取。

語法

<x:select	id = "name"
		scope = "page|request|session"	
		connectionSpec = "connectionSpec_id"
		connectionSpecRef = "connectionSpecRef"
		maxFieldSize = "numberOfBytes"
		maxRows = "numberOfRows"
		distinctTypesEnabled = "true|false"
		timeOut = "seconds"
		readOnly = "true|false"
		nullToken = "string"
		trace = "true|false" >
	<x:sql>
	</x:sql>
	<x:parameter	
			parmName = "name"
			position = "number"
		type = "sqltype"
		mode = "in|out|inout"
		value = "parmValue" />
</x:select>

x:select 動作有下列屬性:

id
用來在指定的名稱空間中識別 DBSelect Bean 及其 Scripting 變數名稱的名稱。指定的名稱會區分大小寫,且必須符合現行 Scripting 語言變數命名慣例。
scope
這是物件的定義範圍。 預設值是 page。
connectionSpec
這是 x:dataSourceSpecx:driverManagerSpec 動作的 ID。這個值會區分大小寫,且必須符合在範圍內的 connectionSpec 動作。

所參照的動作會提供建立資料庫連線所需要的資訊。 如果動作是發生在 x:batch 動作的主體內,請略過這個屬性,這時會使用 x:batch 動作中所識別的 connectionSpec 動作。如果您在兩個位置中指定它,就會出現錯誤旗標。

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

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

maxFieldSize
指定結果集中任何直欄的大小上限(位元組)。0 值表示沒有上限。預設值是 0。
maxRows
指定可提取至快取記憶體的列數上限。0 值表示沒有上限。預設值是 0。
distinctTypesEnabled
是否要針對含使用者定義(不同)類型的結果集啟用插入、更新和刪除等動作。 預設值是 False。
timeOut
這是執行陳述式時所允許的秒數上限。預設值是 0,表示沒有上限。
readOnly
指定是否容許資料更新。true 值表示不容許更新,即使資料庫管理程式允許也是如此。false 值表示容許更新,不過,必須先得到資料庫管理程式的許可。 預設值是 False。
nullToken
指定要用來代表資料庫空值的字串值,會區分大小寫。 這個屬性是選用的。 它會作為在這個 Select 中取得或設定直欄或參數值的任何動作之相同屬性的預設值。 如果兩個位置都略過這個屬性,預設值就是 &empty(&empty 是一個類似於 HTML 字元實體的特殊值,在這個屬性中,被識別為代表空字串。) 請參閱空值,以取得空值表示法的詳細資料。
trace
這是指是否要啟用資料庫動作的追蹤。 預設值是 False。

x:select 動作的主體中可以有下列標示:

<x:sql>
這指定要執行的 SQL 陳述式。
<x:parameter>
這指定 SQL 陳述式中之參數的值和 Meta 資料。 在 x:parameter 標示和 SQL 陳述式各參數之間,必須有一對一的關係。

範例

下列動作會建立一個名稱為 select1、範圍為 session 的 DBSelect Bean。它會利用 conn1 中的資訊來連接至資料庫,以及執行其結果集含有 EMPLOYEE 表格中的員工編號及名稱之 Select 陳述式。Select 中沒有任何參數(從資料庫的觀點),但會有要求物件中的使用者輸入代入其中。

<x:select id="select2" scope="session" connectionSpec="conn1">
	<x:sql>
		SELECT EMPNO, EMPNAME FROM EMPLOYEE 
		WHERE WORKDEPT = ?
	</x:sql>
	<x:parameter position="1" type="VARCHAR"
		   value='<%= request.getParameter("department") %>' />
</x:select>
	

下列動作會建立一個名稱為 select3 的 DBSelect Bean。這個範例類似於前面的範例,但參數由名稱來識別,不由位置來識別。

<x:select id="select3" scope="session" connectionSpec="conn1">
	<x:sql>
		SELECT EMPNO, EMPNAME FROM EMPLOYEE 
		WHERE WORKDEPT = :dept
	</x:sql>
	<x:parameter parmName="dept" type="VARCHAR"
		   value='<%= request.getParameter("department") %>' />
</x:select>

下列動作會在前述範例的結果集各列中進行疊代,利用 x:getColumn 動作在要求輸出中寫入直欄值。請參閱 <x:repeat>,以取得 x:repeat 動作的詳細資料;請參閱 <x:getColumn>,以取得 x:getColumn 動作的詳細資料。

<table border="1" width="300" height="100"><tbody>
	<tr> <td>員工編號:</td> <td>姓名:</td> </tr>
	<x:repeat name="select1" over="rows">
		<tr>
			<x:repeat over="columns">
				<td><x:getColumn /></td>
			</x:repeat>
		</tr>
	</x:repeat>

下列動作會在結果集的各列中進行疊代,利用 x:getColumn 動作在要求輸出中寫入直欄值。請參閱 <x:repeat>,以取得 x:repeat 動作的詳細資料;請參閱 <x:getColumn>,以取得 x:getColumn 動作的詳細資料。

<table border="1" width="300" height="100"><tbody>
	<tr> <td>員工編號:</td> <td>姓名:</td> </tr>
	<x:repeat name="select1" over="rows">
		<tr>
			<td><x:getColumn colName="EMPNO"/></td>
			<td><x:getColumn colName="EMPNAME"/></td>
		</tr>
	</x:repeat></tbody></table>
使用條款 | 讀者意見
(C) Copyright IBM Corporation 2000, 2005. All Rights Reserved.