首页 > 编程笔记 > Java笔记

JSP JSTL <sql:query>标签:通过SQL语句查询

<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

所有教程

优秀文章