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

来源:互联网 发布:时时彩四星缩水软件 编辑:程序博客网 时间:2024/06/06 20:12

    在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为事务的隔离级别(必有)。






原创粉丝点击