JSTL 标准标签库还提供了数据库操作的标准标签,使得 Web 开发者不再需要在 JSP 页面中嵌入脚本语言或者编写 JavaBean 类来连接数据库,使得页面风格更加统一和易于维护。用于数据库操作的主要标签包括如下:
- <sql:setDataSource>:该标签用于数据库连接设置。
- <sql:transaction>:把其他<sql:query>以及<sql:update>操作放置在一个事务中。
- <sql:query>:进行数据库查询操作。
- <sql:update>:进行数据库更新操作。
- <sql:param>:进行参数的设定。
- <sql:dateParam>:进行日期型参数的设置。
下面通过一个简单的案例来介绍JSTL的SQL标签库的使用
<%@ taglib uri="http://java.sun.com/jsp/jstl/sql" prefix="sql" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@ page contentType="text/html;charset=GBK"%>
<%@ page isELIgnored="false" %>
<html>
<head>
<title>JSTL: SQL</title>
</head>
<body bgcolor="#FFFFFF">
<h3>SQL 标签库</h3>
<hr>
<%
//设定 newName 变量,并保存在 request 范围内
request.setAttribute("newName", new String("Jake"));
//设数据库连接驱动到 session 范围的 myDbDriver 变量中
session.setAttribute("myDbDriver","com.mysql.jdbc.Driver");
//设定数据库连接到 session 范围的 myDbUrl 变量中
session.setAttribute("myDbUrl","jdbc:mysql://localhost:3306/jspdbyjydb");
session.setAttribute("myDbUserName","root");//设定数据库用户名
session.setAttribute("myDbPassword","admin");//设定数据库用户密码
%>
<!-- 首先设定数据库连接 -->
<sql:setDataSource
var="example" driver="${sessionScope.myDbDriver}"
url="${sessionScope.myDbUrl}" user="${sessionScope.myDbUserName}"
password="${sessionScope.myDbPassword}"
/>
<!-- 把数据库查询和更新操作放在一个事务中 -->
<sql:transaction dataSource="${example}">
<!-- 使用sql:update标签创建一个数据库表 mytable -->
<sql:update var="newTable">
create table mytable (nameid int primary key,name varchar(80) )
</sql:update>
<!-- 向 mytable 表中插入数据 -->
<sql:update var="updateCount">INSERT INTO mytable VALUES (1,'Tom')</sql:update>
<!-- 向 mytable 表中插入数据,并使用sql:param标签插入参数值 -->
<sql:update var="updateCount">INSERT INTO mytable VALUES (?,'Johnson')<sql:param value="2"/></sql:update>
<!-- 向 mytable 表中插入数据 -->
<sql:update var="updateCount">INSERT INTO mytable VALUES (?,?)<sql:param value="3"/>
<sql:param value="${newName}"/></sql:update>
<!-- 查询数据库表 mytable 中所有内容 -->
<sql:query var="deejay">SELECT * FROM mytable</sql:query>
</sql:transaction>
<!-- 对返回的 Result 结果中的每行的列进行迭代处理 ,取出每一列-->
<table border="1">
<c:forEach var="row" items="${deejay.rowsByIndex}">
<tr><c:forEach var="column" items="${row}">
<td><c:out value="${column}"/></td>
</c:forEach></tr>
</c:forEach>
</table>
<!-- 没有指定每行的列索引,注意与上面的不同, 这里可以指定取出哪一列-->
<table border="1">
<c:forEach var="row" items="${deejay.rows}">
<tr>
<td><c:out value="${row.nameid}"/></td>
<td><c:out value="${row.name}"/></td>
</tr>
</c:forEach>
</table>
<!-- 把 mytable 数据库表删除 -->
<sql:update var="newTable" dataSource="${example}">
drop table mytable
</sql:update>
</body>
</html>
程序说明:
首先进行了数据库连接的各参数的设定,并把它们存储在 session 范围内的变量中,这样有利于在整个 Web 应用中的其他页面中进行调用。
把整个的数据库表的创建、插入以及查询操作放置在<sql:transaction>标签设定的一个事务中。
在获取查询信息时,本实例使用了两种方法,前一种方法使用索引迭代取出行中每个列的数据;第一种方法没有使用索引,而是通过指定行中的特定列来取得数据。
运行结果: