JSP基础(二十四)——JSTL数据库标签

本文介绍如何在JSP页面中使用JSTL SQL标签进行数据库操作,包括设置数据源、执行查询和更新操作,并展示如何处理返回结果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

    在Web应用中,常需要访问关系数据库来获取动态数据。尽管对于Web应用的设计要求数据库操作的处理应用在业务逻辑层内,但是在某些情况下,需要在JSP页面直接访问数据库。利用JSTL提供的数据库标签可以查询和更新数据库的数据。

JSTL中与SQL相关的标签
分类标签说明
联机:setDataSource设置数据源
SQL操作指令:query设置SQL查询
 param设置SQL参数
 update设置SQL更新
 dataParam日期参数解析
 transaction批量交易

使用前引入:

<%@ taglib prefix="sql" uri="http://java.sun.com/jsp/jstl/sql" %>

使用SQL标签访问数据库步骤:①指定数据源     ②进行查询或更新操作    ③对返回的结果进行处理


一、指定数据源

    在操作数据之前,需要先确定要操作的数据库。SQL标记使用数据源(类型为javax.sql.DataSource)来指定操作的数据库。数据源对象提供物理数据源的连接。

<sql:setDataSource>指定数据源语法:

①使用dataSource属性:

<sql:setDataSource dataSource="jdbc:mysql://localhost/DBName,com.mysql.jdbc.Driver" />

②使用dataSource属性:

<sql:setDataSource driver="com.mysql.jdbc.Driver" url="jdbc:mysql://localhost/DBName" />

(user属性和password属性则分别用于指定用户名、密码。如果使用var属性,则只是将该数据原保存到一个变量中。)



二、进行查询或更新操作

2.1、<sql:update>标签

    数据库更新操作如:创建表、插入、删除记录(create、drop、insert、update、delete)等。语法格式如下:

    ①将更新语句作为属性值:

<sql:update sql="更新语句" dataSource="dataSource" var="varName" scope="page/..." />

    ②将更新语句放在标记本体中:

<sql:update dataSource="dataSource" var="varName" scope="page/..." >
    更新语句
</sql:update>

    var指定修改操作影响的数据记录行数(数据更新的条数),该变量可以指定的有效范围;如果没有在设置默认数据源,还需要使用属性dataSource来指定数据源。


示例:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="sql" uri="http://java.sun.com/jsp/jstl/sql" %>    
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>sql:update</title>
</head>
<body>
    <sql:setDataSource url="jdbc:mysql://localhost/test" 
    driver="com.mysql.jdbc.Driver" user="root" password="123456" var="ds"/>
   
    <%--有dataSource属性 --%>
    <%-- 更新books表中书的数量bookCount<50,把价格price调为50.0 --%>
    <sql:update dataSource="${ds }" sql="update books set price=50.0 where bookCount<50 " var="updateCount"/>
    <c:out value="${'数据变动的数目:' }"/>
    <c:out value="${updateCount }"/> <br>
    
   
    <%--没有dataSource属性  --%>
    <%--更新books表中书的数量bookCount>200,把价格price-10 --%>
    <sql:update dataSource="${ds }" sql="update books set price=price-10? where bookCount>? " var="updateCounts">
     	<sql:param value="${10.0 }"/>
        <sql:param value="${200 }"/>
    </sql:update>
    <c:out value="${'数据变动的数目:' }"/>
    <c:out value="${updateCounts }"/>
</body>
</html>

结果:



2.2、<sql:query>标签

     执行一个数据库查询,结果存储在属性var指定的变量中。var为必有属性!

    ① 将查询语句作为属性值

<sql:query sql="查询语句" var="varName" dataSource="dataSource" scope="page/..." maxRows="rowMax" startRow="startRow"  />

    ②将查询语句放在标记本体中

<sql:query  var="varName" dataSource="dataSource" scope="page/..." maxRows="rowMax" startRow="startRow"  >
    查询语句 
</sql:query>

    ③包含指定搜寻参数与选择性参数的本体内容:

<sql:query  var="varName" dataSource="dataSource" scope="page/..." maxRows="rowMax" startRow="startRow"  >
    查询语句
    <sql:param /> 
</sql:query>

     属性maxRows用于指定查询的最大行数(不指定或指定为-1表示 不限制行数);属性startRow值指定查询结果的一个开始行的索引(查询结果的第一行索引为0,startRow默认为0)。


示例:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>    
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="sql" uri="http://java.sun.com/jsp/jstl/sql" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>sql:query</title>
</head>
<body>
    <sql:setDataSource url="jdbc:mysql://localhost/test" 
    driver="com.mysql.jdbc.Driver" user="root" password="123456" var="ds"/>
   
    <h3>找到价格为¥50.0的书的信息:</h3>
    <sql:query dataSource="${ds }" sql="select * from books where price=50.0" var="selectResult"/>
    <c:forEach var="row" items="${selectResult.rows }">
        <c:out value="${'id:' }" />
        <c:out value="${row.id }" /><br>
        <c:out value="${'name:' }" />
        <c:out value="${row.name }" /><br>
        <c:out value="${'bookCount:' }" />
        <c:out value="${row.bookCount }" />   
        <c:out value="${'author:' }" />
        <c:out value="${row.author }" />
        <br> <br>
        
    </c:forEach>

</body>
</html>

结果:



三、对返回的结果进行处理

在执行了查询操作之后,会将返回结果保存在Result类型的变量中(一般是一张二维表),该变量一般会有以下几个属性:

rows:以字段名称当作索引的查询结果。

<sql:query sql="select * from test" var="x"/>
<c:forEach items="${x.rows }" var="temp">
    ${temp.name },${temp.sex },${temp.age },${temp.score }<br>
</c:forEach>


rowsByIndex:以数字当作索引的查询结果。

<sql:query sql="select * from test" var="x"/>
<c:forEach items="${x.rowsByIndex }" var="temp">
    ${temp[0] },${temp[1] },${temp[2] },${temp[3] }<br>
</c:forEach>

columnNames:字段名称。

<sql:query sql="select * from test" var="x"/>
<c:forEach items="${x.columnNames }" var="temp">
    ${temp }<br>
</c:forEach>

rowCount:返回结果的行数。

<sql:query sql="select * from test" var="x"/>
${x.rowCount }

limitedByMaxRows:查询是否有最大行数限制,为Boolean类型。




四、其他SQL标签

4.1、动态地设定变量的标签

<sql:param>和<sql:dateParam>标记用来动态地设定变量。

假如SQL指令需要一些动态变量,可以写成:

<sql:query var="result">
    select * from user where userid='${userid}'
</sql:query>

将上面的语句改成:

<sql:query var="result">
    select * from user where userid=?
    <sql:param value=${userid}>
</sql:query>

<sql:dateParam>只是用来设置日期相关的参数,如timeStamp、date、time:

<sql:dateParam value="value"  type="type">

4.2、事务处理标签

单个事务需要多条SQL才能执行,这些SQL语句要么全部执行,要么都不执行,这时可以使用<sql:transaction>标记,其语法:

<sql:transaction dataSource="dataSource"
isolation="read_committed/read_uncommitted/repeatable/serializable">
    多个<sql:query>、<sql:update/>标记
</sql:transaction> 

dataSource属性为数据源(可选),isolation为事务的隔离级别(必有)。






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值