x:select 動作用來在關聯式資料庫中執行查詢。如果查詢產生不是空的結果集,它的列會快取在應用程式伺服器機器中的快取記憶體內。 其中的一列(剛開始是第一列),一律被視為現行列。
使用這個動作會建立一個 DBSelect Bean,您可以利用 id 屬性指定其名稱的變數來存取這個 Bean。
JSP 動作可利用 DBSelect Bean 的基本功能。您可以利用 x:nextRow 和 x:previousRow 來定位到結果集中的其他列上。您可以利用 x:updateRow、x:deleteRow 和 x:insertRow 這些動作來變更結果集中的列,而不需要撰寫其他的 SQL 陳述式。您可以利用 x:getColumn 和 x:setColumn 動作來存取結果集中的直欄值。如果 SQL 陳述式有參數的話,您可以利用 x:getParameter 和 x:parameter 動作來存取它們。
DBSelect Bean 的所有方法都可以利用 Scriptlet 來執行,且它的所有內容都可以利用標準 jsp:getProperty 和 jsp: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 動作有下列屬性:
所參照的動作會提供建立資料庫連線所需要的資訊。 如果動作是發生在 x:batch 動作的主體內,請略過這個屬性,這時會使用 x:batch 動作中所識別的 connectionSpec 動作。如果您在兩個位置中指定它,就會出現錯誤旗標。
您可以指定 connectionSpec 或 connectionSpecRef,但不能同時指定這兩者。
x:select 動作的主體中可以有下列標示:
下列動作會建立一個名稱為 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>