Database access
标签库中的标签用来提供在
JSP
页面中可以与数据库进行交互的功能,虽然它的存在对于早期纯
JSP
开发的应用以及小型的开发有着意义重大的贡献,但是对于
MVC
模型来说,它却是违反规范的。因为与数据库交互的工作本身就属于业务逻辑层的工作,所以不应该在
JSP
页面中出现,而是应该在模型层中进行。
对于
Database access
标签库本书不作重点介绍,只给出几个简单示例让读者略微了解它们的功能。
Database access
标签库有以下
6
组标签来进行工作:
<sql:setDataSource>
、
<sql:query>
、
<sql:update>
、
<sql:transaction>
、
<sql:setDataSource>
、
<sql:param>
、
<sql:dateParam>
。
9.6.1
用于设置数据源的
<sql:setDataSource>
标签
<sql:setDataSource>
标签用于设置数据源,下面看一个示例:
<sql:setDataSource
var="dataSrc"
url="jdbc:postgresql://localhost:5432/myDB"
driver="org.postgresql.Driver"
user="admin"
password="1111"/>
该示例定义一个数据源并保存在“
dataSrc
”变量内。
9.6.2
用于查询的
<sql:query>
标签
<sql:query>
标签用于查询数据库,它标签体内可以是一句查询
SQL
。下面看一个示例:
<sql:query var="queryResults" dataSource="${dataSrc}">
select * from table1
</sql:query>
该示例将返回查询的结果到变量“
queryResults
”中,保存的结果是
javax.servlet.jsp.jstl.sql.Result
类型的实例。要取得结果集中的数据可以使用
<c:forEach>
循环来进行。下面看一个示例。
<c:forEach var="row" items="${queryResults.rows}">
<tr>
<td>${row.userName}</td>
<td>${row.passWord}</td>
</tr>
</c:forEach>
“
rows
”是
javax.servlet.jsp.jstl.sql.Result
实例的变量属性之一,用来表示数据库表中的“列”集合,循环时,通过“
${row.XXX}
”表达式可以取得每一列的数据,“
XXX
”是表中的列名。
9.6.3
用于更新的
<sql:update>
标签
<sql:update>
标签用于更新数据库,它的标签体内可以是一句更新的
SQL
语句。其使用和
<sql:query>
标签没有什么不同。
9.6.4
用于事务处理的
<sql:transaction>
标签
<sql:transaction>
标签用于数据库的事务处理,在该标签体内可以使用
<sql:update>
标签和
<sql:query>
标签,而
<sql:transaction>
标签的事务管理将作用于它们之上。
<sql:transaction>
标签对于事务处理定义了
read_committed
、
read_uncommitted
、
repeatable_read
、
serializable4
个隔离级别。
9.6.5
用于事务处理的
<sql:param>
、
<sql:dateParam>
标签
这两个标签用于向
SQL
语句提供参数,就好像程序中预处理
SQL
的“
?
”一样。
<sql:param>
标签传递除
java.util.Date
类型以外的所有相融参数,
<sql:dateParam>
标签则指定必须传递
java.util.Date
类型的参数。