JSTL标签库 - SQL标签库

jopen 10年前

SQL标签库
JSTL提供了与数据库相关操作的标签,可以直接从页面上实现数据库操作的功能,在开发小型网站是可以很方便的实现数据的读取和操作。本章将详细介绍这些标签的功能和使用方法。
SQL标签库从功能上可以划分为两类:设置数据源标签、SQL指令标签。
引入SQL标签库的指令代码为:
<%@ taglib prefix="sql" uri="http://java.sun.com/jsp/jstl/sql" %>
1 设置数据源
使用<sql:setDataSource>标签可以实现对数据源的配置。
【语法1】:直接使用已经存在的数据源。
<sql:setDataSource dataSource=”dataSource”[var=”name”] [scope=”page|request|session|application”]/>

【语法2】:使用JDBC方式建立数据库连接。
<sql:setDataSource driver=”driverClass” url=”jdbcURL”  user=”username” password=”pwd”  [var=”name”] [scope=”page|request|session|application”]/>

<sql:DataSource>标签属性说明
参数名:说明: EL: 类型: 必须: 默认值
dataSource:数据源:是:String、Javax.sql.DataSource: 否:无
driver:使用的JDBC驱动:是:String:否:无
url: 连接数据库的路径:是:String:否:无
user:连接数据库的用户名:是:String:否:无
password:连接数据库的密码:是:String:否:无
var:指定存储数据源的变量名:否: String:否: 无
scope:指定数据源存储的JSP范围:否:String:否:page
提示:是否必须是相对的,比如说如果使用数据源则,driver、url等就不再被使用。如果使用JDBC则要用到driver、url、user、password属性。

2 SQL操作标签
JSTL提供了<sql:query>、<sql:update>、<sql:param>、<sql:dateParam> 和<sql:transaction>这5个标签,通过使用SQL语言操作数据库,实现增加、删除、修改等操作。下面将介绍这5个标签的功能和使用方式。

1.<sql:query>标签
<sql:query>标签用来查询数据。
【语法1】:
<sql:query sql=”sqlQuery” var=”name” [scope=”page|request|session|application”] [dataSource=”dateSource”] [maxRow=”maxRow”] [startRow=”starRow”]/>

【语法2】:
<sql:query var=”name” [scope=”page|request|session|application”] [dataSource=”dateSource”] [maxRow=”maxRow”] [startRow=”starRow”]>
 sqlQuery
</sql:query>

<sql:query>标签属性说明
参数名:说明:EL: 类型:必须:默认值
sql:查询数据的SQL语句:是: String: 是:无
dataSource: 数据源对象: 是:String、Javax.sql.DataSoutce:否:无
maxRow:设定最多可以暂存数据的行数:是:String:否:无
startRow: 设定从那一行数据开始:是:String:否:无
var:指定存储查询结果的变量名:否:String:是:无
scope:指定结果的作用域: 否: String:否: page
使用<sql:query>必须指定数据源,dataSource是可选的,如果未给定该属性标签会在page范围内查找是否设置过数据源,如果没有找到将抛出异常。
一般情况下使用<sql:setDateSource>标签设置一个数据源存储在session范围中,当需要数据库连接时使用dataSource属性并实现数据库的操作。
<sql:query>的var属性是必须的用来存放结果集,如果没有指定scope范围则默认为page,即在当前页面我们可以随时输出查询结果。
maxRows和startRow属性用来操作结果集,使用SQL语句首先吧数据放入内存中,检查是否设置了startRow属性,如果设置了就从starRow指定的那一行开始取maxRows个值,如果没有设定则从第一行开始取。

 结果集参数说明
属性名:类型:说明
rowCount:int:结果集中的记录总数,该属性统计结果集中有效记录的量,可以使用于大批量数据分页显示。
Rows:Java.util.Map:以字段为索引查询的结果,得到每个字段对应的值。返回的结果为:字段名={字段值···}
rowsByIndex: Object[]:以数字为作索引的查询结果,常用得到数据库中数据的方式,从有效行的第一个元素开始遍历,到最后一个有效行的最后一个元素。
columnNames: String[]: 字段名称数组,用于得到数据库中的字段名。
limitedByMaxRows:boolean:是否设置了maxRows属性来限制查询记录的数量,用于判断是否受到了maxRows的限制。
提示:limitedByMaxRows用来判断程序是否收到maxRows属性的限制。并不是说设定了maxRows属性,得到结果集的 limitedByMaxRows的属性都为true,当取出的结果集小于maxRows时,则maxRows没有对结果集起到作用此时也为false。例如可以使用startRow属性限制结果集的数据量。
结果集的作用就是定义了数据在页面中的显示方式。

2.<sql:update>标签
<sql:update>用来实现操作数据库如:使用create、update、delete和insert等SQL语句,并返回影响记录的条数。
【语法1】:SQL语句放在标签属性中。
<sql:update sql=”SQL语句” [var=”name”] [scope=”page|request|session|application”] [dateSource=”dateSource”]/>

【语法2】:SQL语句放在标签体内。
<sql:update [var=”name”] [scope=”page|request|session|application”] [dateSource=”dateSource”]>
SQL语句
</sql:update>

<sql:update>标签属性说明
参数名:说明:EL:类型:必须:默认值
sql: 查询数据的SQL语句:是: String: 是: 无
dataSource: 数据源对象: 是: String、Javax.sql.DataSoutce: 否:无
var:指定存储查询结果的变量名:否: String:是:无
scope:指定结果的作用域:否:String:否:page
提示:<sql:update>标签的属性同<sql:query>标签的属性相比只减少了maxRows和startRow2个属性。其他参数用法一样。
使用<sql:update>可以实现数据表的创建、插入数据、更行数据、删除数据。使用时只须在标签中放入正确的SQL语句即可,同时要捕获可能产生的异常。

3.<sql:param>标签
<sql:param>标签用于动态的为SQL语句设定参数,同<sql:query>标签共同使用。可以防止SQL注入作用类似于java.sql.PreparedStatement。

【语法1】:
<sql:param value=”value”/>

【语法2】:
<sql:param>Value</sql:param>

【参数说明】:
value的作用为SQL中的参数赋值。
【使用示例】:
<sql:query var=”result”>
select * from person where 序号=?
<sql:query>

4.<sql:dateParam>标签
<sql:dataParam>标签主要用于为SQL标签填充日期类型的参数值。

【语法】:
<sql:dateParam value=”date”[type=”timestamp|time|date”]/>

【参数说明】:
value属性:java.util.Date类型的参数。
type属性:指定填充日期的类型timestamp(全部日期和时间)、time(填充的参数为时间)、date(填充的参数为日期)。

5.<sql:transaction>标签
<sql:transaction>标签提供了数据操作的一种安全机制(即事务回滚),当操作数据库的某条SQL语句发生异常时,取消<sql:transaction>标签体中的所有操作,恢复原来的状态,重新对数据库进行操作。

【语法】:
<sql:transaction [dataSource=”dataSource”] [isolation=”read_committed|read_uncommitted|repeatable|serializable”]>
 <sql:query>
 <sql:uptade>
</sql:transation>