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 操作的主体可以带有下列标记:
以下操作创建一个 DBSelect Bean,其名称为 select1,其作用域为会话。它使用 conn1 中的信息连接至数据库, 并执行 Select 语句,该语句的结果集包含 EMPLOYEE 表中的职员编号和姓名。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>
以下操作创建一个 DBSelect Bean,其名称为 select3。此示例与前一个示例类似,但参数由名称而不是位置标识。
<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>Employee number:</td> <td>Name:</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>Employee number:</td> <td>Name:</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>