<sql:query> 標籤用於通過 SQL 語句查詢符合條件的資料。
語法:
無查詢條件的語法格式如下:
<sql:query sql="sqlQuery"
var="varName"[scope="{page|request|session|application}"]
[dataSource="dataSource"]
[maxRows="maxRows"]
[startRow="startRow"]>
<sql:param>actions
</sql:query>
含有查詢條件的語法格式如下:
<sql:query var="varName"
[scope="{page|request|session|application}"]
[dataSource="dataSource"]
[maxRows="maxRows"]
[startRow="startRow"]>
query
optional<sql:param>actions
</sql:query>
<sql:query> 標籤各屬性的詳細介紹如表所示。
<sql:query> 標籤屬性
屬性 |
型別 |
描述 |
參照 EL |
sql |
String |
查詢資料的SQL語句 |
可以 |
dataSource |
String,javax.sql.DataSource |
使用的資料來源物件 |
可以 |
maxRows |
String |
指定查詢記錄的最大行數 |
可以 |
startRows |
String |
指定查詢記錄的開始行數 |
可以 |
var |
String |
儲存查詢結果的變數,該變數包含5個操作結果集的屬性,相應的屬性說明如下表所示 |
不可以 |
scope |
String |
變數的儲存範圍 |
不可以 |
說明:dataSource 屬性是可選項,如果沒有設定該屬性,會在 page 範圍內尋找資料來源物件,如果找不到,則會丟擲 JspException 異常。
結果集變數的屬性
屬性 |
型別 |
描述 |
rowCount |
int |
結果集中的記錄總數 |
columnNames |
String[] |
欄位名陣列 |
rows |
java.util.Map |
以欄位名索引結果集 |
rowsByIndex |
Object[] |
以數位下標索引結果集 |
limitedByMaxRows |
boolean |
是否設定了maxRows屬性來限制查詢記錄的數量 |
範例1:
應用 <sql:setDataSource> 標籤連線 SQL Server 2000 資料庫 db_testJSTL,並應用 <sql:query> 標籤輸出資料表 tb_user 中的從第 3 條記錄開始的5條記錄,關鍵程式碼如下:
<%@page language="java" contentType="text/html;charset=GBK" pageEncoding="GBK"%>
<%@taglib prefix="sql" uri="http://java.sun.com/jsp/jstl/sql"%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<sql:setDataSource driver="com.microsoft.jdbc.sqlserver.SQLServerDriver"
url="jdbc:microsoft:sqlserver://localhost:1433;databaseName=db_testJSTL"
user="sa" password=""/>
<sql:query var="rs" sql="SELECT*FROM tb_user" maxRows="5" startRow="2"/>
<table width="300" border="1" cellspacing="0" cellpadding="0" bordercolor="#FFFFFF"
bordercolordark="#999999" bordercolorlight="#FFFFFF">
<tr>
<td align="center">&nbsp;${rs.columnNames[0]}</td>
<td align="center">&nbsp;${rs.columnNames[1]}</td>
<td align="center">&nbsp;${rs.columnNames[2]}</td>
</tr>
<c:forEach items="${rs.rowsByIndex}"var="row">
<tr>
<td>&nbsp;${row[0]}</td>
<td>&nbsp;${row[1]}</td>
<td>&nbsp;${row[2]}</td>
</tr>
</c:forEach>
</table>
範例2
應用 <sql:setDataSource> 標籤連線 MySQL 資料庫 db_testJSTL,並應用 <sql:query> 標籤輸出資料表 tb_user 中的全部記錄,關鍵程式碼如下:
<%@page language="java" contentType="text/html;charset=GBK" pageEncoding="GBK"%>
<%@taglib prefix="sql" uri="http://java.sun.com/jsp/jstl/sql"%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
連線 MySQL 資料庫
<sql:setDataSource driver="com.mysql.jdbc.Driver"
url="jdbc:mysql://localhost:3306/db_testjstl"user="root"
password="111"/>
<sql:query var="rs" sql="SELECT*FROM tb_user"/>
<table width="300" border="1" cellspacing="0" cellpadding="0" bordercolor="#FFFFFF"
bordercolordark="#999999"bordercolorlight="#FFFFFF">
<tr>
<td align="center">&nbsp;${rs.columnNames[0]}</td>
<td align="center">&nbsp;${rs.columnNames[1]}</td>
<td align="center">&nbsp;${rs.columnNames[2]}</td>
</tr>
<c:forEach items="${rs.rowsByIndex}" var="row">
<tr>
<td>&nbsp;${row[0]}</td>
<td>&nbsp;${row[1]}</td>
<td>&nbsp;${row[2]}</td>
</tr>
</c:forEach>
</table>
範例3
在 <sql:query> 標籤中指定資料來源為 <sql:setDataSource> 標籤建立的資料來源 conn,關鍵程式碼如下:
<%@page language="java" contentType="text/html;charset=GBK" pageEncoding="GBK"%>
<%@taglib prefix="sql" uri="http://java.sun.com/jsp/jstl/sql"%>
<sql:setDataSource driver="com.microsoft.jdbc.sqlserver.SQLServerDriver"
url="jdbc:microsoft:sqlserver://localhost:1433;databaseName=db_testJSTL"
user="sa" password="" var="conn"/>
<sql:transaction dataSource="${conn}">
<sql:query var="rs" sql="SELECT*FROM tb_user"/>
典型應用
應用 <sql:query> 標籤從資料庫中 tb_goods 表的第 4 行記錄開始無條件地查詢6條記錄。使用 <sql:query> 標籤查詢資料,關鍵程式碼如下:
<%@page pageEncoding="gbk" contentType="text/html;charset=GBK"%>
<%@taglib prefix="sql" uri="/WEB-INF/sql.tld"%>
<%@taglib prefix="c" uri="/WEB-INF/c.tld"%>
<sql:setDataSource driver="com.microsoft.jdbc.sqlserver.SQLServerDriver"
url="jdbc:microsoft:sqlserver://localhost:1433;databaseName=db_JSDQ26"
user="sa"password=""/>
<sql:query var="result" sql="select*from tb_goods" maxRows="6" startRow="4"/>
<table width="400" border="1" cellpadding="0" cellspacing="0"
bordercolor="white" bordercolordark="white" bordercolorlight="black">
<tr align="center" bgcolor="cyan">
<td width="80">${result.columnNames[1]}</td>
<td width="300">${result.columnNames[2]}</td>
<td width="50">${result.columnNames[3]}</td>
<td width="50">${result.columnNames[4]}</td>
</tr>
<c:forEach items="${result.rowsByIndex}" var="row">
<tr>
<td>${row[1]}</td>
<td>${row[2]}</td>
<td>${row[3]}</td>
<td>${row[4]}</td>
</tr>
</c:forEach>
</table>
執行結果如下:
商品名稱 |
簡介 |
單價 |
現價 |
康佳電視 |
高效節能型、使用壽命長 |
2980.0000 |
2980.0000 |
奧馬冰箱 |
實用又實惠、使用壽命長 |
1980.0000 |
1980.0000 |
三星彩電 |
等離子電視、對人體無輻射作用 |
2950.0000 |
2950.0000 |
創維彩電 |
實用型、節能型 |
1999.0000 |
1890.0000 |
TCL電視 |
外型美觀、使用壽命長 |
3290.0000 |
3290.0000 |
索尼數碼相機 |
品質好、使用壽命長 |
2005.0000 |
2005.0000 |