0x01 SQL标签
JSTL SQL标签库提供了与关系型数据库(Oracle,MySQL,SQL Server等等)进行交互的标签引用SQL标签库语法:<%@ taglib prefix="sql" uri="http://java.sun.com/jsp/jstl/sql" %>
| 标签 | 描述 |
|---|---|
| 指定数据源 | |
| 运行SQL查询语句 | |
| 运行SQL更新语句 | |
| 将SQL语句中的参数设为指定值 | |
| 将SQL语句中的日期参数设为指定的java.util.Date 对象值 | |
| 在共享数据库连接中提供嵌套的数据库行为元素 将所有语句以一个事务的形式来运行 |
0x02 小例子
// 目录结构├── src│ └── main│ └── webapp│ └── com│ │ └── ...│ └── WEB-INF│ │ └── web.xml│ ├── ...│ └── JSTL库测试│ │ ├── ...
0x02.1 前置操作
需要自己准备几个小东西1. 引入JDBC MySQL驱动2. 使用Navicat Premium创建个名字叫jsp_mysql的数据库3. 创建数据表4. 添加测试数据不知道如何引入JDBC MySQL驱动的,可以查看下面这个文章:(使用JDBC驱动数据库)https://www.yuque.com/pmiaowu/gpy1q8/rz3351// 创建数据表CREATE TABLE employee (id INT NOT NULL,name VARCHAR (255),date date);// 创建测试数据INSERT INTO employeeVALUES(100,'Zara','2002/05/16'),(101,'Mahnaz','1978/11/28'),(102,'Zaid','1980/10/10'),(103,'Sumit','1971/05/08')
0x02.2
0x02.2.1 语法
<sql:setDataSource>标签用来配置数据源或者将数据源信息存储在某作用域的变量中用来作为其它JSTL数据库操作的数据源
<sql:setDataSource>标签语法格式如下:<sql:setDataSourcevar="<string>"scope="<string>"dataSource="<string>"driver="<string>"url="<string>"user="<string>"password="<string>"/>
| 属性 | 描述 | 必选 | 默认值 |
| driver | 要注册的JDBC驱动 | 否 | 无 |
| url | 数据库连接的JDBC URL | 否 | 无 |
| user | 数据库用户名 | 否 | 无 |
| password | 数据库密码 | 否 | 无 |
| dataSource | 事先准备好的数据库 | 否 | 无 |
| var | 代表数据库的变量 | 否 | 默认设置 |
| scope | var属性的作用域 | 否 | Page |
0x02.2.2 小例子
// 文件地址: ./src/main/webapp/JSTL库测试/// 文件名称: jstl_sql_setdatasource.jsp// 注意: 接下来的范例我们会经常使用到<sql:setDataSource>标签<%@ page contentType="text/html;charset=UTF-8" language="java" %><%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %><%@ taglib uri="http://java.sun.com/jsp/jstl/sql" prefix="sql" %><sql:setDataSource var="snapshot" driver="com.mysql.jdbc.Driver"url="jdbc:mysql://192.168.24.137/jsp_mysql"user="root"password="Zaq123456789!!!a"/><sql:query dataSource="${snapshot}" sql="select (1+1);" var="result" /><c:forEach var="row" items="${result.rowsByIndex}"><c:forEach var="column" items="${row}"><div><c:out value="${column}"/></div></c:forEach></c:forEach>// 打开: http://127.0.0.1:8081/mavenJspTest_war/JSTL库测试/jstl_sql_setdatasource.jsp// 返回结果: 2
0x02.3
0x02.3.1 语法
<sql:query>标签用来运行SQL SELECT语句,然后将运行结果存储在作用域变量中
<sql:query>标签语法格式如下:<sql:queryvar="<string>"scope="<string>"sql="<string>"dataSource="<string>"startRow="<string>"maxRows="<string>"/>
| 属性 | 描述 | 必选 | 默认值 |
| sql | 需要执行的SQL命令 | 否 | Body |
| dataSource | 所使用的数据库连接(覆盖默认值) | 否 | 默认数据库 |
| maxRows | 存储在变量中的最大结果数 | 否 | 无穷大 |
| startRow | 开始记录的结果的行数 | 否 | 0 |
| var | 代表数据库的变量 | 否 | 默认设置 |
| scope | var属性的作用域 | 否 | Page |
0x02.3.2 小例子
// 文件地址: ./src/main/webapp/JSTL库测试/// 文件名称: jstl_sql_query.jsp<%@ page contentType="text/html;charset=UTF-8" language="java" %><%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %><%@ taglib uri="http://java.sun.com/jsp/jstl/sql" prefix="sql" %><sql:setDataSource var="snapshot" driver="com.mysql.jdbc.Driver"url="jdbc:mysql://192.168.24.137/jsp_mysql"user="root"password="Zaq123456789!!!a"/><sql:query dataSource="${snapshot}" var="result">SELECT * from employee;</sql:query><html><head><title>jstl_sql_query</title></head><body><table border="1"><tr><th>id</th><th>name</th><th>date</th></tr><c:forEach var="row" items="${result.rows}"><tr><td><c:out value="${row.id}"/></td><td><c:out value="${row.name}"/></td><td><c:out value="${row.date}"/></td></tr></c:forEach></table></body></html>// 打开: http://127.0.0.1:8081/mavenJspTest_war/JSTL库测试/jstl_sql_query.jsp

0x02.4
0x02.4.1 语法
<sql:update>标签用来执行一个没有返回值的SQL语句比如SQL INSERT, UPDATE, DELETE语句
<sql:update> 语法格式如下:<sql:updatevar="<string>"scope="<string>"sql="<string>"dataSource="<string>"/>
| 属性 | 描述 | 必选 | 默认值 |
| sql | 需要执行的SQL命令 | 否 | Body |
| dataSource | 所使用的数据库连接 | 否 | 默认数据库 |
| var | 用来存储所影响行数的变量 | 否 | 无 |
| scope | var属性的作用域 | 否 | Page |
0x02.4.2 小例子
// 文件地址: ./src/main/webapp/JSTL库测试/// 文件名称: jstl_sql_update.jsp<%@ page contentType="text/html;charset=UTF-8" language="java" %><%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %><%@ taglib uri="http://java.sun.com/jsp/jstl/sql" prefix="sql" %><sql:setDataSource var="snapshot" driver="com.mysql.jdbc.Driver"url="jdbc:mysql://192.168.24.137/jsp_mysql"user="root"password="Zaq123456789!!!a"/><sql:update dataSource="${snapshot}" var="count">INSERT INTO employee VALUES (104, 'Nuha', '2010/05/26');</sql:update><sql:query dataSource="${snapshot}" var="result">SELECT * from employee;</sql:query><html><head><title>jstl_sql_update</title></head><body><table border="1"><tr><th>id</th><th>name</th><th>date</th></tr><c:forEach var="row" items="${result.rows}"><tr><td><c:out value="${row.id}"/></td><td><c:out value="${row.name}"/></td><td><c:out value="${row.date}"/></td></tr></c:forEach></table></body></html>// 打开: http://127.0.0.1:8081/mavenJspTest_war/JSTL库测试/jstl_sql_update.jsp

0x02.5
0x02.5.1 语法
<sql:param>标签与<sql:query>标签和<sql:update>标签嵌套使用, 用来提供一个值占位符如果是一个null值, 则将占位符设为NULL
<sql:param>标签语法格式如下:<sql:param value="<string>"/>
| 属性 | 描述 | 必填 | 默认值 |
| value | 需要设置的参数值 | 否 | Body |
0x02.5.2 小例子
// 文件地址: ./src/main/webapp/JSTL库测试/// 文件名称: xxxxx// 使用<sql:update>标签来执行 SQL DELETE 语句来删除 id=104 的记录<%@ page contentType="text/html;charset=UTF-8" language="java" %><%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %><%@ taglib uri="http://java.sun.com/jsp/jstl/sql" prefix="sql" %><sql:setDataSource var="snapshot" driver="com.mysql.jdbc.Driver"url="jdbc:mysql://192.168.24.137/jsp_mysql"user="root"password="Zaq123456789!!!a"/><c:set var="id" value="104"/><sql:update dataSource="${snapshot}" var="count">DELETE FROM employee WHERE id = ?<sql:param value="${id}"/></sql:update><sql:query dataSource="${snapshot}" var="result">SELECT * from employee;</sql:query><html><head><title>jstl_sql_param.jsp</title></head><body><table border="1"><tr><th>id</th><th>name</th><th>date</th></tr><c:forEach var="row" items="${result.rows}"><tr><td><c:out value="${row.id}"/></td><td><c:out value="${row.name}"/></td><td><c:out value="${row.date}"/></td></tr></c:forEach></table></body></html>// 打开: http://127.0.0.1:8081/mavenJspTest_war/JSTL库测试/jstl_sql_param.jsp

0x02.6
0x02.6.1 语法
<sql:dateParam>标签与<sql:query>标签和<sql:update>标签嵌套使用,用来提供日期和时间的占位符如果是一个null值,则将占位符设为NULL
<sql:dateParam>标签语法格式如下:<sql:dateParam value="<string>" type="<string>"/>
| 属性 | 描述 | 必选 | 默认值 |
| value | 需要设置的日期参数(java.util.Date) | 否 | Body |
| type | DATE(只有日期), TIME(只有时间), TIMESTAMP(日期和时间) | 否 | TIMESTAMP |
0x02.6.2 小例子
// 文件地址: ./src/main/webapp/JSTL库测试/// 文件名称: jstl_sql_dateparam.jsp// 使用<sql:update>标签, <sql:param>标签与<sql:dateParam>标签来执行SQL UPDATE语句// 更新id=102的date数据为2001/12/16<%@ page import="java.util.Date" %><%@ page contentType="text/html;charset=UTF-8" language="java" %><%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %><%@ taglib uri="http://java.sun.com/jsp/jstl/sql" prefix="sql" %><sql:setDataSource var="snapshot" driver="com.mysql.jdbc.Driver"url="jdbc:mysql://192.168.24.137/jsp_mysql"user="root"password="Zaq123456789!!!a"/><%Date date = new Date("2001/12/16");int id = 102;%><sql:update dataSource="${snapshot}" var="count">UPDATE employee SET date = ? WHERE id = ?<sql:dateParam value="<%=date%>" type="DATE"/><sql:param value="<%=id%>"/></sql:update><sql:query dataSource="${snapshot}" var="result">SELECT * from employee;</sql:query><html><head><title>jstl_sql_dateparam</title></head><body><table border="1"><tr><th>id</th><th>name</th><th>date</th></tr><c:forEach var="row" items="${result.rows}"><tr><td><c:out value="${row.id}"/></td><td><c:out value="${row.name}"/></td><td><c:out value="${row.date}"/></td></tr></c:forEach></table></body></html>// 打开: http://127.0.0.1:8081/mavenJspTest_war/JSTL库测试/jstl_sql_dateparam.jsp

0x02.7
0x02.7.1 语法
<sql:transaction>标签用来将<sql:query>标签和<sql:update>标签封装至事务中可以将大量的<sql:query>和<sql:update>操作装入<sql:transaction>中,使它们成为单一的事务它确保对数据库的修改不是被提交就是被回滚
<sql:transaction>语法格式如下:<sql:transaction dataSource="<string>" isolation="<string>"/>
| 属性 | 描述 | 必选 | 默认值 |
| dataSource | 所使用的数据库(覆盖默认值) | 否 | 默认数据库 |
| isolation | 事务隔离等级: READ_COMMITTED READ_UNCOMMITTED REPEATABLE_READ SERIALIZABLE |
否 | 数据库默认 |
0x02.7.2 小例子
// 文件地址: ./src/main/webapp/JSTL库测试/// 文件名称: jstl_sql_transaction.jsp// 使用<sql:update>和<sql:transaction>来执行SQL UPDATE语句// <sql:transaction>中的SQL语句要么都执行成功,要么都执行失败,没有其它结果<%@ page contentType="text/html;charset=UTF-8" language="java" %><%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %><%@ taglib uri="http://java.sun.com/jsp/jstl/sql" prefix="sql" %><sql:setDataSource var="snapshot" driver="com.mysql.jdbc.Driver"url="jdbc:mysql://192.168.24.137/jsp_mysql"user="root"password="Zaq123456789!!!a"/><sql:transaction dataSource="${snapshot}"><sql:update var="count">UPDATE employee SET name = 'Ali' WHERE id = 101</sql:update><sql:update var="count">UPDATE employee SET name = 'Shah' WHERE id = 102</sql:update><sql:update var="count">INSERT INTO employee VALUES (105, 'Nuha', '2010/05/26');</sql:update></sql:transaction><sql:query dataSource="${snapshot}" var="result">SELECT * from employee;</sql:query><html><head><title>jstl_sql_transaction</title></head><body><table border="1"><tr><th>id</th><th>name</th><th>date</th></tr><c:forEach var="row" items="${result.rows}"><tr><td><c:out value="${row.id}"/></td><td><c:out value="${row.name}"/></td><td><c:out value="${row.date}"/></td></tr></c:forEach></table></body></html>// 打开: http://127.0.0.1:8081/mavenJspTest_war/JSTL库测试/jstl_sql_transaction.jsp

