JSP基础(二十四)——JSTL数据库标签
来源:互联网 发布:时时彩四星缩水软件 编辑:程序博客网 时间:2024/06/06 20:12
在Web应用中,常需要访问关系数据库来获取动态数据。尽管对于Web应用的设计要求数据库操作的处理应用在业务逻辑层内,但是在某些情况下,需要在JSP页面直接访问数据库。利用JSTL提供的数据库标签可以查询和更新数据库的数据。
使用前引入:
<%@ 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为事务的隔离级别(必有)。
- JSP基础(二十四)——JSTL数据库标签
- JSP基础(二十一)——JSTL核心标签
- JSP基础(二十二)——JSTL il8n标签
- JSP基础(二十)——JSTL标签库简介
- 【JSTL】JSP标准标签库(二)——核心标签库
- JSTL JSP标准标签库(二)
- JSP标签(JSTL)
- JSP基础(二十三)——函数标签
- JSP标准标签库(JSTL)—— core
- JSP标准标签库——JSTL
- JSP——JSTL标签库
- JSP——JSTL核心标签(1)
- JSP——JSTL核心标签(2)
- JSP笔记——JSTL标签
- JSP标准标签库——JSTL
- JSP 笔记 —— JSTL 标签库
- JSTL标签(二)
- javaweb学习总结(二十四)——jsp传统标签开发
- 双向链表
- 不忘初心,牢记梦想
- 11.26文件操作作业
- [python]pandas的read_csv读入csv文件报错 'utf-8' codec can't decode byte 0xbe in position 0
- 自顶向下,逐步求精
- JSP基础(二十四)——JSTL数据库标签
- Wasserstein GAN最新进展:从weight clipping到gradient penalty,更加先进的Lipschitz限制手法
- jar包太大 intelj 打不开 无法阅读源码
- http的get和post
- 阿拉伯数字转中文(java实现)
- HDOJ 2539 点球大战
- Spring源码分析:AOP源码解析(上篇)
- python数据结构,二分查找法的实现!
- BitMap实现