JSTL sql 标记提供 SQL 支持。sql 标签的 url 是http://java.sun.com/jsp/jstl/sql并且前缀是sql。
SQL 标记库允许标记与 Microsoft SQL Server、mySQL 或 Oracle 等 RDBMS(关系数据库)交互。用于在 JSP 中包含 JSTL SQL 标记库的语法是:
<%@ taglib uri="http://java.sun.com/jsp/jstl/sql" prefix="sql" %>
JSTL SQL 标记列表
SQL 标记 | 说明 |
sql:setDataSource | 它用于创建仅适用于原型设计的简单数据源。 |
sql:query | 它用于执行在其 sql 属性或正文中定义的 SQL 查询。 |
sql:update | 它用于执行在其 sql 属性或标签正文中定义的 SQL 更新。 |
sql:param | 它用于将 SQL 语句中的参数设置为指定的值。 |
sql:dateParam | 它用于将 SQL 语句中的参数设置为指定的 java.util.Date 值。 |
sql:transaction | 它用于为嵌套数据库操作提供公共连接。 |
JSTL SQL <sql:setDataSource> 标签
<sql:setDataSource> 标签用于创建仅适用于原型设计的简单数据源。
它用于直接从 JSP 创建数据源变量,并存储在作用域变量中。它可以用作其他数据库操作的输入。
让我们看一个简单的例子来理解 xml <sql:setDataSource> 标签是:
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/sql" prefix="sql"%>
<html>
<head>
<title>sql:setDataSource Tag</title>
</head>
<body>
<sql:setDataSource var="db" driver="com.mysql.cj.jdbc.Driver"
url="jdbc:mysql://localhost/test?autoReconnect=true&useSSL=false&useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai"
user="root" password="root"/>
</body>
</html>
上面的代码用作其他数据库操作的输入。它用于设置与数据库服务器的连接。因此,您将开始在后续 SQL 标记中使用 <sql:setDataSource>。
JSTL SQL <sql:query> 标签
<sql:query> 标签用于执行在其 sql 属性或正文中定义的 SQL 查询。它用于执行 SQL SELECT 语句并将结果保存在作用域变量中。
例子:
<sql:query dataSource="${db}" var="rs">
SELECT * from Students;
</sql:query>
JSTL SQL <sql:query> 完整示例
让我们看一个简单的JSP例子来理解<sql:query>标签的使用是:
<%@ page import="java.io.*,java.util.*,java.sql.*"%>
<%@ page import="javax.servlet.http.*,javax.servlet.*"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/sql" prefix="sql"%>
<html>
<head>
<title>sql:query Tag</title>
</head>
<body>
<sql:setDataSource var="db" driver="com.mysql.cj.jdbc.Driver"
url="jdbc:mysql://localhost/test?autoReconnect=true&useSSL=false&useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai"
user="root" password="root" />
<sql:query dataSource="${db}" var="rs">
SELECT * from Students;
</sql:query>
<table border="2" width="100%">
<tr>
<th>Student ID</th>
<th>First Name</th>
<th>Last Name</th>
<th>Age</th>
</tr>
<c:forEach var="table" items="${rs.rows}">
<tr>
<td><c:out value="${table.id}" /></td>
<td><c:out value="${table.First_Name}" /></td>
<td><c:out value="${table.Last_Name}" /></td>
<td><c:out value="${table.Age}" /></td>
</tr>
</c:forEach>
</table>
</body>
</html>
这将产生以下结果:
JSTL SQL <sql:update> 标签
<sql:update> 标签用于执行在其 sql 属性或标签正文中定义的 SQL DML 查询。它可能是 SQL UPDATE、INSERT 或 DELETE 语句。
例子:
<sql:update dataSource="${db}" var="count">
INSERT INTO Students VALUES (154,'Nasreen', 'jaha', 25);
</sql:update>
JSTL SQL <sql:update> 完整示例
让我们看一个简单的JSP例子来了解<sql:update>标签的使用是:
<%@ page import="java.io.*,java.util.*,java.sql.*"%>
<%@ page import="javax.servlet.http.*,javax.servlet.*"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/sql" prefix="sql"%>
<html>
<head>
<title>sql:query Tag</title>
</head>
<body>
<sql:setDataSource var="db" driver="com.mysql.cj.jdbc.Driver"
url="jdbc:mysql://localhost/test?autoReconnect=true&useSSL=false&useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai"
user="root" password="root" />
<sql:update dataSource="${db}" var="count">
INSERT INTO Students VALUES (154,'Nasreen', 'jaha', 25);
</sql:update>
<sql:query dataSource="${db}" var="rs">
SELECT * from Students;
</sql:query>
<table border="2" width="100%">
<tr>
<th>Student ID</th>
<th>First Name</th>
<th>Last Name</th>
<th>Age</th>
</tr>
<c:forEach var="table" items="${rs.rows}">
<tr>
<td><c:out value="${table.id}" /></td>
<td><c:out value="${table.First_Name}" /></td>
<td><c:out value="${table.Last_Name}" /></td>
<td><c:out value="${table.Age}" /></td>
</tr>
</c:forEach>
</table>
</body>
</html>
这将产生以下结果:
JSTL SQL <sql:param> 标签
<sql:param> 标签设置 SQL 语句中的参数值。
它用作 <sql:update> 和 <sql:query> 的嵌套标记,以提供 SQL 查询参数中的值。如果提供了 null 值,则 value 属性的值设置为 SQL NULL。
例子:
<c:set var="StudentId" value="152"/>
<sql:update dataSource="${db}" var="count">
DELETE FROM Students WHERE Id = ?
<sql:param value="${StudentId}" />
</sql:update>
JSTL SQL <sql:param> 完整示例
让我们看一个简单的JSP例子来理解<sql:param>标签的使用是:
<%@ page import="java.io.*,java.util.*,java.sql.*"%>
<%@ page import="javax.servlet.http.*,javax.servlet.*"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/sql" prefix="sql"%>
<html>
<head>
<title>sql:query Tag</title>
</head>
<body>
<sql:setDataSource var="db" driver="com.mysql.cj.jdbc.Driver"
url="jdbc:mysql://localhost/test?autoReconnect=true&useSSL=false&useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai"
user="root" password="root" />
<%
java.util.Date DoB = new java.util.Date("2000/10/16");
int studentId = 151;
%>
<sql:update dataSource="${db}" var="count">
UPDATE Student SET dob = ? WHERE Id = ?
<sql:dateParam value="<%=DoB%>" type="DATE" />
<sql:param value="<%=studentId%>" />
</sql:update>
<sql:query dataSource="${db}" var="rs">
SELECT * from Student;
</sql:query>
<table border="2" width="100%">
<tr>
<th>Student ID</th>
<th>First Name</th>
<th>Last Name</th>
<th>Age</th>
</tr>
<c:forEach var="table" items="${rs.rows}">
<tr>
<td><c:out value="${table.id}" /></td>
<td><c:out value="${table.First_Name}" /></td>
<td><c:out value="${table.Last_Name}" /></td>
<td><c:out value="${table.dob}" /></td>
</tr>
</c:forEach>
</table>
</body>
</html>
这将产生以下结果:
JSTL SQL <sql:dateParam> 标签
<sql:dateParam> 用于设置 SQL 查询参数的指定日期。
它用作 <sql:update> 和 <sql:query> 的嵌套标记,为 SQL 查询参数提供日期和时间值。如果提供空值,则该值设置为 SQL NULL。
例子:
<%
Date DoB = new Date("2000/10/16");
int studentId = 151;
%>
<sql:update dataSource="${db}" var="count">
UPDATE Student SET dob = ? WHERE Id = ?
<sql:dateParam value="<%=DoB%>" type="DATE" />
<sql:param value="<%=studentId%>" />
</sql:update>
JSTL SQL <sql:dateParam> 完整示例
让我们看一个简单的 JSP 示例来了解 <sql:dateParam> 标签的使用:
<%@ page import="java.io.*,java.util.*,java.sql.*"%>
<%@ page import="javax.servlet.http.*,javax.servlet.*"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/sql" prefix="sql"%>
<html>
<head>
<title>sql:query Tag</title>
</head>
<body>
<sql:setDataSource var="db" driver="com.mysql.cj.jdbc.Driver"
url="jdbc:mysql://localhost/test?autoReconnect=true&useSSL=false&useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai"
user="root" password="root" />
<%
java.util.Date DoB = new java.util.Date("2000/10/16");
int studentId = 151;
%>
<sql:update dataSource="${db}" var="count">
UPDATE Student SET dob = ? WHERE Id = ?
<sql:dateParam value="<%=DoB%>" type="DATE" />
<sql:param value="<%=studentId%>" />
</sql:update>
<sql:query dataSource="${db}" var="rs">
SELECT * from Student;
</sql:query>
<table border="2" width="100%">
<tr>
<th>Student ID</th>
<th>First Name</th>
<th>Last Name</th>
<th>Age</th>
</tr>
<c:forEach var="table" items="${rs.rows}">
<tr>
<td><c:out value="${table.id}" /></td>
<td><c:out value="${table.First_Name}" /></td>
<td><c:out value="${table.Last_Name}" /></td>
<td><c:out value="${table.dob}" /></td>
</tr>
</c:forEach>
</table>
</body>
</html>
输出:
JSTL SQL <sql:transaction> 标签
<sql:transaction> 标签用于事务管理。它用于将多个 <sql:update> 分组为公共事务。如果将多个 SQL 查询分组到一个事务中,则数据库只会被命中一次。
它用于确保数据库修改由可以回滚或提交的嵌套操作执行。
例子:
<%
Date DoB = new Date("2000/10/16");
int studentId = 151;
%>
<sql:transaction dataSource="${db}">
<sql:update var="count">
UPDATE Student SET First_Name = 'Suraj' WHERE Id = 150
</sql:update>
<sql:update var="count">
UPDATE Student SET Last_Name= 'Saifi' WHERE Id = 153
</sql:update>
<sql:update var="count">
INSERT INTO Student
VALUES (154,'Supriya', 'Jaiswal', '1995/10/6');
</sql:update>
</sql:transaction>
JSTL SQL <sql:transaction> 完整示例
让我们看一个简单的 JSP 示例来了解 <sql:transaction> 标签的使用:
<%@ page import="java.io.*,java.util.*,java.sql.*"%>
<%@ page import="javax.servlet.http.*,javax.servlet.*"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/sql" prefix="sql"%>
<html>
<head>
<title>sql:query Tag</title>
</head>
<body>
<sql:setDataSource var="db" driver="com.mysql.cj.jdbc.Driver"
url="jdbc:mysql://localhost/test?autoReconnect=true&useSSL=false&useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai"
user="root" password="root" />
<%
java.util.Date DoB = new java.util.Date("2000/10/16");
int studentId = 151;
%>
<sql:transaction dataSource="${db}">
<sql:update var="count">
UPDATE Student SET First_Name = 'Suraj' WHERE Id = 150
</sql:update>
<sql:update var="count">
UPDATE Student SET Last_Name= 'Saifi' WHERE Id = 153
</sql:update>
<sql:update var="count">
INSERT INTO Student
VALUES (154,'Supriya', 'Jaiswal', '1995/10/6');
</sql:update>
</sql:transaction>
<sql:query dataSource="${db}" var="rs">
SELECT * from Student;
</sql:query>
<table border="2" width="100%">
<tr>
<th>Student ID</th>
<th>First Name</th>
<th>Last Name</th>
<th>Age</th>
</tr>
<c:forEach var="table" items="${rs.rows}">
<tr>
<td><c:out value="${table.id}" /></td>
<td><c:out value="${table.First_Name}" /></td>
<td><c:out value="${table.Last_Name}" /></td>
<td><c:out value="${table.dob}" /></td>
</tr>
</c:forEach>
</table>
</body>
</html>
输出: