JSP基础(二十四)——JSTL数据库标签
2017-12-06 19:01
381 查看
在Web应用中,常需要访问关系数据库来获取动态数据。尽管对于Web应用的设计要求数据库操作的处理应用在业务逻辑层内,但是在某些情况下,需要在JSP页面直接访问数据库。利用JSTL提供的数据库标签可以查询和更新数据库的数据。
JSTL中与SQL相关的标签
使用前引入:<%@ 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>
结果:
① 将查询语句作为属性值
<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标签
假如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">
<sql:transaction dataSource="dataSource"
isolation="read_committed/read_uncommitted/repeatable/serializable">
多个<sql:query>、<sql:update/>标记
</sql:transaction>
dataSource属性为数据源(可选),isolation为事务的隔离级别(必有)。
分类 | 标签 | 说明 |
联机: | setDataSource | 设置数据源 |
SQL操作指令: | query | 设置SQL查询 |
param | 设置SQL参数 | |
update | 设置SQL更新 | |
dataParam | 日期参数解析 | |
transaction | 批量交易 |
使用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 SQL标签操作数据库
- JSP基础(二十)——JSTL标签库简介
- jsp中jstl标签库里面变量设置基础教程
- JSP基础语法之十六:JSTL配置和核心标签(C)的使用
- JSP基础:六、EL表达式、JSTL标签和乱码解决
- jsp页面jstl标签c:foreach相关属性讲解
- 【Node.js基础篇】(六)实现如同jsp标签的HTML模板
- java jsp struts2标签 从数据库中读取含有html标签的数据显示问题
- mongodb基础系列——数据库查询数据返回前台JSP(一)
- JSTL利用fmt标签国际化的基础实现
- jsp页面中jstl标签详解
- JSP JSTL标签
- JSP标签之jstl常用标签
- JSTL标签急速秒杀jsp页面中的java代码(一)---Core标签库
- 引入jstl标签,查看本地的Tomcat 中servlet和jsp版本号。
- jsp中jstl标签的类似 if - else 语句 的语法
- JSP/Servlet-----使用JSTL标签库
- jsp使用jstl标签实现国际化