SQL标签
SQL标签库提供了与关系型数据库进行交互的标签。
引入语法:<%@ taglib prefix="sql" uri="http://java.sun.com/jsp/jstl/sql" %>
数据库:test
用户名:root
密码:123
项目中加入驱动jar包:mysql-connector-java-5.1.26-bin.jar
表:create table Employees
(
id int not null,
age int not null,
first varchar (255),
last varchar (255),
birth date//dateParam标签后增加的一列
);
数据:insert into Employees values(100, 18, 'Zara', 'Ali');
insert into Employees values(101, 25, 'Mahnaz', 'Fatma');
insert into Employees values(102, 30, 'Zaid', 'Khan');
insert into Employees values(103, 28, 'Sumit', 'Mittal');
标签包括有:
标签 | 描述 |
---|---|
<sql:setDataSource> | 指定数据源 |
<sql:query> | 运行SQL查询语句 |
<sql:update> | 运行SQL更新语句 |
<sql:param> | 将SQL语句中的参数设为指定值 |
<sql:dateParam> | 将SQL语句中的日期参数设为指定的java.util.Date 对象值 |
<sql:transaction> | 在共享数据库连接中提供嵌套的数据库行为元素,将所有语句以一个事务的形式来运行 |
<sql:setDataSource> 指定数据源,用来配置数据源或者将数据源信息存储在某作用域的变量中,用来作为其他Jstl数据库操作的数据源。
属性:
属性 | 描述 | 是否必要 | 默认值 |
---|---|---|---|
driver | 要注册的JDBC驱动 | 否 | 无 |
url | 数据库连接的JDBC URL | 否 | 无 |
user | 数据库用户名 | 否 | 无 |
password | 数据库密码 | 否 | 无 |
dataSource | 事先准备好的数据库 | 否 | 无 |
var | 代表数据库的变量 | 否 | 默认设置 |
scope | var属性的作用域 | 否 | Page |
eg:
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%> <%@ 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=ISO-8859-1"> <title>Insert title here</title> </head> <body> <sql:setDataSource var="snapshot"
driver="com.mysql.jdbc.Driver" url="jdbc:mysql://localhost/test" user="root" password="123" /> </body> </html>
<sql:query> 用来运行select语言,并将结果存储在作用域变量中。
属性:
属性 | 描述 | 是否必要 | 默认值 |
---|---|---|---|
sql | 需要执行的SQL命令(返回一个ResultSet对象) | 否 | Body |
dataSource | 所使用的数据库连接(覆盖默认值) | 否 | 默认数据库 |
maxRows | 存储在变量中的最大结果数 | 否 | 无穷大 |
startRow | 开始记录的结果的行数 | 否 | 0 |
var | 代表数据库的变量 | 否 | 默认设置 |
scope | var属性的作用域 | 否 | Page |
eg:
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> <title>Insert title here</title> </head> <body> <sql:setDataSource var="snapshot" driver="com.mysql.jdbc.Driver" url="jdbc:mysql://localhost/test" user="root" password="123" /> <sql:query dataSource="${snapshot}" var="result"> select * from Employees; </sql:query> <table border="1" width="100%"> <tr> <th>Emp ID</th> <th>First Name</th> <th>Last Name</th> <th>Age</th> </tr> <c:forEach var="row" items="${result.rows}"> <tr> <td><c:out value="${row.id}" /></td> <td><c:out value="${row.first}" /></td> <td><c:out value="${row.last}" /></td> <td><c:out value="${row.age}" /></td> </tr> </c:forEach> </table> </body> </html>
//结果输出为:
<sql:update> 用来执行一个没有返回值的SQL语句,如insert,update,delete。
语法:
属性 | 描述 | 是否必要 | 默认值 |
---|---|---|---|
sql | 需要执行的SQL命令(不返回ResultSet对象) | 否 | Body |
dataSource | 所使用的数据库连接(覆盖默认值) | 否 | 默认数据库 |
var | 用来存储所影响行数的变量 | 否 | 无 |
scope | var属性的作用域 | 否 | Page |
eg:
<%@ 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=ISO-8859-1"> <title>Insert title here</title> </head> <body> <sql:setDataSource var="snapshot" driver="com.mysql.jdbc.Driver" url="jdbc:mysql://localhost/test" user="root" password="123" /> <sql:query dataSource="${snapshot}" var="result"> select * from Employees; </sql:query> <table border="1" width="100%"> <tr> <th>Emp ID</th> <th>First Name</th> <th>Last Name</th> <th>Age</th> </tr> <c:forEach var="row" items="${result.rows}"> <tr> <td><c:out value="${row.id}" /></td> <td><c:out value="${row.first}" /></td> <td><c:out value="${row.last}" /></td> <td><c:out value="${row.age}" /></td> </tr> </c:forEach> </table> <sql:update dataSource="${snapshot}" var="count"> insert into Employees values(104,2,'Nuha','Ali'); </sql:update> <sql:query dataSource="${snapshot}" var="result"> select * from Employees; </sql:query> <p>增加一条信息后:</p> <table border="1" width="100%"> <tr> <th>Emp ID</th> <th>First Name</th> <th>Last Name</th> <th>Age</th> </tr> <c:forEach var="row" items="${result.rows}"> <tr> <td><c:out value="${row.id}" /></td> <td><c:out value="${row.first}" /></td> <td><c:out value="${row.last}" /></td> <td><c:out value="${row.age}" /></td> </tr> </c:forEach> </table> </body> </html>
//结果输出为:
<sql:param> 提供值占位符,与上面两个标签签到使用。
语法:
属性 | 描述 | 是否必要 | 默认值 |
---|---|---|---|
value | 需要设置的参数值 | 否 | Body |
eg:
<%@ 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=ISO-8859-1"> <title>Insert title here</title> </head> <body> <sql:setDataSource var="snapshot" driver="com.mysql.jdbc.Driver" url="jdbc:mysql://localhost/test" user="root" password="123" /> <c:set var="id" value="104" /> <p>查询id=104的人员信息:</p> <sql:query dataSource="${snapshot}" var="result"> select * from Employees where id=?; <sql:param value="${id}" /> </sql:query> <table border="1" width="100%"> <tr> <th>Emp ID</th> <th>First Name</th> <th>Last Name</th> <th>Age</th> </tr> <c:forEach var="row" items="${result.rows}"> <tr> <td><c:out value="${row.id}" /></td> <td><c:out value="${row.first}" /></td> <td><c:out value="${row.last}" /></td> <td><c:out value="${row.age}" /></td> </tr> </c:forEach> </table> </body> </html>
//结果输出为:
<sql:dateParam> 与<sql:param>用法一直只是提供的是日期和时间的占位符。
语法:
属性 | 描述 | 是否必要 | 默认值 |
---|---|---|---|
value | 需要设置的日期参数(java.util.Date) | 否 | Body |
type | DATE (只有日期),TIME(只有时间), TIMESTAMP (日期和时间) | 否 | TIMESTAMP |
eg:
<%@ 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=ISO-8859-1"> <title>Insert title here</title> </head> <body> <sql:setDataSource var="snapshot" driver="com.mysql.jdbc.Driver" url="jdbc:mysql://localhost/test" user="root" password="123" /> <sql:query dataSource="${snapshot}" var="result"> select * from Employees ; </sql:query> <table border="1" width="100%"> <tr> <th>Emp ID</th> <th>First Name</th> <th>Last Name</th> <th>Age</th> <th>Birth</th> </tr> <c:forEach var="row" items="${result.rows}"> <tr> <td><c:out value="${row.id}" /></td> <td><c:out value="${row.first}" /></td> <td><c:out value="${row.last}" /></td> <td><c:out value="${row.age}" /></td> <td><c:out value="${row.birth}" /></td> </tr> </c:forEach> </table> <c:set var="id_new" value="102" /> <c:set var="birth_new" value="<%=new java.util.Date() %>" /> <sql:update dataSource="${snapshot}" var="count"> update Employees set birth=? where id=?; <sql:dateParam type="DATE" value="${birth_new}" /> <sql:param value="${id_new}" /> </sql:update> <sql:query dataSource="${snapshot}" var="result"> select * from Employees; </sql:query> <p>更改 id=102 的 birth:</p> <table border="1" width="100%"> <tr> <th>Emp ID</th> <th>First Name</th> <th>Last Name</th> <th>Age</th> <th>Birth</th> </tr> <c:forEach var="row" items="${result.rows}"> <tr> <td><c:out value="${row.id}" /></td> <td><c:out value="${row.first}" /></td> <td><c:out value="${row.last}" /></td> <td><c:out value="${row.age}" /></td> <td><c:out value="${row.birth}" /></td> </tr> </c:forEach> </table> </body> </html>
//结果输出为:
<sql:transaction> 事务处理,用来将<sql:query>和<sql:update>标签封装在事务中,使之成为单一事务,同时提交或回滚。
语法:
性 | 描述 | 是否必要 | 默认值 |
---|---|---|---|
dataSource | 所使用的数据库(覆盖默认值) | 否 | 默认数据库 |
isolation | 事务隔离等级 (READ_COMMITTED,,READ_UNCOMMITTED, REPEATABLE_READ或 SERIALIZABLE) | 否 | 数据库默认 |
eg:
<%@ 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=ISO-8859-1"> <title>Insert title here</title> </head> <body> <sql:setDataSource var="snapshot" driver="com.mysql.jdbc.Driver" url="jdbc:mysql://localhost/test" user="root" password="123" /> <sql:query dataSource="${snapshot}" var="result"> select * from Employees ; </sql:query> <table border="1" width="100%"> <tr> <th>Emp ID</th> <th>First Name</th> <th>Last Name</th> <th>Age</th> <th>Birth</th> </tr> <c:forEach var="row" items="${result.rows}"> <tr> <td><c:out value="${row.id}" /></td> <td><c:out value="${row.first}" /></td> <td><c:out value="${row.last}" /></td> <td><c:out value="${row.age}" /></td> <td><c:out value="${row.birth}" /></td> </tr> </c:forEach> </table> <c:set var="id_new" value="102" /> <c:set var="birth_new" value="<%=new java.util.Date() %>" /> <sql:transaction dataSource="${snapshot}"> <sql:update var="count"> update Employees set birth=? where id=?; <sql:dateParam type="DATE" value="${birth_new}" /> <sql:param value="${id_new}" /> </sql:update> <sql:update var="count"> update Employees set last='Ali' where id=102; </sql:update> <sql:update var="count"> insert into Employees values(104,2,'Nuha','Ali','2014/2/3'); </sql:update> </sql:transaction> <sql:query dataSource="${snapshot}" var="result"> select * from Employees; </sql:query> <p>一次性事务执行后:</p> <table border="1" width="100%"> <tr> <th>Emp ID</th> <th>First Name</th> <th>Last Name</th> <th>Age</th> <th>Birth</th> </tr> <c:forEach var="row" items="${result.rows}"> <tr> <td><c:out value="${row.id}" /></td> <td><c:out value="${row.first}" /></td> <td><c:out value="${row.last}" /></td> <td><c:out value="${row.age}" /></td> <td><c:out value="${row.birth}" /></td> </tr> </c:forEach> </table> </body> </html>
//结果输出为: