JSTL-SQL標籤庫

主頁:http://www.cnblogs.com/EasonJim/p/6958992.html的分支頁。html

本章的前提須要先新建數據表及添加默認數據,腳本以下:java

--
-- 數據庫: `test`
--

-- --------------------------------------------------------

--
-- 表的結構 `student`
--

CREATE TABLE IF NOT EXISTS `student` (
  `ID` int(11) NOT NULL AUTO_INCREMENT,
  `NAME` varchar(20) NOT NULL,
  `AGE` int(11) NOT NULL,
  PRIMARY KEY (`ID`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=10 ;

--
-- 轉存表中的數據 `student`
--

INSERT INTO `student` (`ID`, `NAME`, `AGE`) VALUES
(1, 'Zara', 11),
(2, 'Nuha', 2),
(3, 'Ayan', 15);

及MySQL的JAR包:mysql

        <!-- mysql-connector-java -->
        <!-- http://mvnrepository.com/artifact/mysql/mysql-connector-java -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>6.0.6</version>
        </dependency>    

1、<sql:setDataSource>sql

<sql:setDataSource>標籤設置了數據源配置變量或將數據源信息保存到一個指定範圍的變量中,該變量可用做爲其餘JSTL數據庫操做的輸入。數據庫

屬性:jsp

<sql:setDataSource>標籤具備以下所示屬性:測試

屬性 描述 是否必需 默認值
driver 要被註冊的JDBC驅動程序類名
url 數據庫鏈接的JDBC URL
user 數據庫用戶名
password 數據庫密碼
password 數據庫密碼
dataSource 預先準備的數據庫
var 展現數據庫的變量名 設置默認
scope 展現數據庫的變量範圍 頁面

實例:url

對MySQL數據庫設置考慮下述信息:spa

  • 使用的是JDBC MySQL驅動。3d

  • 將要鏈接到本地計算機的TEST數據庫中。

  • 將使用user_id和password來訪問TEST數據庫。

全部上述參數會隨着MySQL或任何其餘數據庫設置而變化。記住上述參數,下面是使用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>JSTL sql:setDataSource Tag</title>
</head>
<body>

<sql:setDataSource var="snapshot" driver="com.mysql.jdbc.Driver" url="jdbc:mysql://localhost:3306/TEST?serverTimezone=UTC" user="root"  password="root"/>
<sql:query dataSource="${snapshot}" sql="select * from student" var="result" />
<c:forEach var="row" items="${result.rows}">
    <c:out value="${row.name}"/>:<c:out value="${row.age}"/><br/>
</c:forEach>
</body>
</html>

這將產生以下所示結果:

2、<sql:query>

<sql:query>標籤執行SQL SELECT語句並將結果保存到給定範圍的變量中。

屬性:

<sql:query>標籤具備以下所示屬性:

屬性 描述 是否必需 默認值
sql 要執行的SQL命令(應返回ResultSet) Body
dataSource 要用的數據庫鏈接(覆蓋默認值) 默認數據庫
maxRows 存儲在變量中的結果的最大值 不限
startRow 結果中開始記錄的行數 0
var 顯示數據庫的變量名 設置默認
scope 顯示來自數據庫的結果的變量範圍 頁面

實例:

如今編寫一個JSP,使用<sql:query>來執行SQL SELECT語句,以下所示:

<%@ 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>JSTL sql:setDataSource Tag</title>
</head>
<body>

<sql:setDataSource var="snapshot" driver="com.mysql.jdbc.Driver" url="jdbc:mysql://localhost:3306/TEST?serverTimezone=UTC" user="root"  password="root"/>
<sql:query dataSource="${snapshot}" sql="select * from student" var="result" />
<c:forEach var="row" items="${result.rows}">
    <c:out value="${row.name}"/>:<c:out value="${row.age}"/><br/>
</c:forEach>
</body>
</html>

如今嘗試訪問上述JSP,會出現以下所示結果:

3、<sql:update>

<sql:update>標籤執行不返回數據的SQL語句,例如SQL INSERT,UPDATE,或DELETE語句。

屬性:

<sql:update>標籤具備以下所示屬性:

屬性 描述 是否必需 默認值
sql 要執行的SQL語句(應不返回ResultSet) Body
dataSource 要使用的數據庫鏈接 (覆蓋默認值) 默認數據庫
var 存儲受影響行數的變量名
scope 存儲受影響行數的變量範圍 頁面

實例:

如今編寫JSP,使用<sql:update>標籤來執行SQL INSERT語句,從而在表中建立一條記錄,以下所示:

<%@ 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>JSTL sql:update Tag</title>
</head>
<body>

<sql:setDataSource var="snapshot" driver="com.mysql.jdbc.Driver" url="jdbc:mysql://localhost:3306/TEST?serverTimezone=UTC" user="root"  password="root"/>

<sql:update dataSource="${snapshot}" var="count">
   INSERT INTO Student (name,age) VALUES ('Jim', '27');
</sql:update>

<sql:query dataSource="${snapshot}" var="result">
   SELECT * from Student;
</sql:query>

<table border="1" width="100%">
<tr>
<th>ID</th>
<th>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.name}"/></td>
<td><c:out value="${row.age}"/></td>
</tr>
</c:forEach>
</table>

</body>
</html>

如今嘗試訪問上述JSP,將顯示以下所示結果:

4、<sql:param>

<sql:param>標籤用於<sql:query><sql:update>標籤的嵌套操做,來爲一個值的佔位符提供值。若是提供了一個空值,那麼佔位符就會被設置爲SQL NULL。

屬性:

<sql:param>標籤具備以下屬性:

屬性 描述 是否必需 默認值
value 要設置的參數值 Body

實例:

如今編寫JSP,使用<sql:update>標籤來執行SQL DELETE語句來從表中刪除一條id=3的記錄,以下所示:

<%@ 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>JSTL sql:param Tag</title>
</head>
<body>

<sql:setDataSource var="snapshot" driver="com.mysql.jdbc.Driver" url="jdbc:mysql://localhost:3306/TEST?serverTimezone=UTC" user="root"  password="root"/>

<c:set var="id" value="3"/>

<sql:update dataSource="${snapshot}" var="count">
  DELETE FROM Student WHERE Id = ?
  <sql:param value="${id}" />
</sql:update>

<sql:query dataSource="${snapshot}" var="result">
   SELECT * from Student;
</sql:query>

<table border="1" width="100%">
<tr>
<th>ID</th>
<th>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.name}"/></td>
<td><c:out value="${row.age}"/></td>
</tr>
</c:forEach>
</table>

</body>
</html>

如今嘗試訪問上述JSP,會顯示以下所示的結果:

5、<sql:dateParam>

<sql:dateParam>標籤用做<sql:query><sql:update>的嵌套操做,爲值佔位符提供日期和時間值。若是提供的是一個空值,那麼該佔位符的值就會被設置爲SQL NULL。

屬性:

<sql:dateParam>標籤具備以下所示屬性:

屬性 描述 是否必需 默認值
value 要設置的日期參數的值(java.util.Date) Body
type 日期(只能是日期), 時間(只能是時間),或TIMESTAMP(日期和時間) TIMESTAMP

實例:

一、建表及添加模擬數據:

 create table Students2
    (
     id int not null,
     first varchar (255),
     last varchar (255),
     dob date
    );
INSERT INTO Students2 VALUES (100, 'Zara', 'Ali', '2002/05/16');
INSERT INTO Students2 VALUES (101, 'Mahnaz', 'Fatma', '1978/11/28');

如今編寫JSP,將<sql:update>標籤與<sql:param><sql:dataParam>標籤一塊兒使用來執行SQL UPDATE語句來更新:

<%@ page import="java.io.*,java.util.*,java.sql.*"%>
<%@ page import="javax.servlet.http.*,javax.servlet.*" %>
<%@ page import="java.util.Date,java.text.*" %>
<%@ 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>JSTL sql:dataParam Tag</title>
</head>
<body>

<sql:setDataSource var="snapshot" driver="com.mysql.jdbc.Driver" url="jdbc:mysql://localhost:3306/TEST?serverTimezone=UTC" user="root"  password="root"/>

<%
Date DoB = new Date("2001/12/16");
int studentId = 100;
%>

<sql:update dataSource="${snapshot}" var="count">
   UPDATE Students2 SET dob = ? WHERE Id = ?
   <sql:dateParam value="<%=DoB%>" type="DATE" />
   <sql:param value="<%=studentId%>" />
</sql:update>

<sql:query dataSource="${snapshot}" var="result">
   SELECT * from Students2;
</sql:query>

<table border="1" width="100%">
<tr>
   <th>Emp ID</th>
   <th>First Name</th>
   <th>Last Name</th>
   <th>DoB</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.dob}"/></td>
</tr>
</c:forEach>
</table>

</body>
</html>

如今嘗試訪問上述 JSP,會出現以下所示結果:

6、<sql:transaction>

注意:表類型應爲InnoDB才支持事務。

<sql:transaction>標籤用於將<sql:query><sql:update>標籤分組到事物中。能夠在<sql:transaction>標籤中放入和語句同樣多的<sql:query><sql:update>標籤,使它們成爲單獨的事物。

若是任何嵌套操做拋出一個異常,它確保由嵌套操做執行的數據庫修改要麼提交要麼回滾。

屬性:

<sql:transaction>標籤具備以下所示屬性:

屬性 描述 是否必需 默認值
dataSource 要使用的數據庫鏈接(覆蓋默認值) 默認數據庫
isolation 事務隔離(READ_COMMITTED,READ_UNCOMMITTED,EPEATABLE_READ,或SERIALIZABLE) 數據庫的默認值

實例:

如今編寫JSP,使用<sql:update><sql:transaction>標籤來執行SQL UPDATE語句。在這裏<sql:transaction>標籤內的代碼要麼被徹底執行,要麼一點也不執行(但通過測試,會只執行不會報錯的SQL,因此還必須增長isolation屬性,不過會拋出異常,此時須要使用異常標籤進行包裝處理):

<%@ page import="java.io.*,java.util.*,java.sql.*"%>
<%@ page import="javax.servlet.http.*,javax.servlet.*"%>
<%@ page import="java.util.Date,java.text.*" %>

<%@ 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>JSTL sql:transaction Tag</title>
</head>
<body>

<sql:setDataSource var="snapshot" driver="com.mysql.jdbc.Driver" url="jdbc:mysql://localhost:3306/TEST?serverTimezone=UTC" user="root"  password="root"/>

<%
Date DoB = new Date("2001/12/16");
int studentId = 100;
%>

<sql:transaction dataSource="${snapshot}">
   <sql:update var="count">
      UPDATE Students2 SET last = 'Ali' WHERE Id = 102
   </sql:update>
   <sql:update var="count">
      UPDATE Students2 SET last = 'Shah' WHERE Id = 103
   </sql:update>
   <sql:update var="count">
     INSERT INTO Students2 
     VALUES (104,'Nuha', 'Ali', '2010/05/26');
   </sql:update>
</sql:transaction>

<sql:query dataSource="${snapshot}" var="result">
   SELECT * from Students2;
</sql:query>

<table border="1" width="100%">
<tr>
<th>Emp ID</th>
<th>First Name</th>
<th>Last Name</th>
<th>DoB</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.dob}"/></td>
</tr>
</c:forEach>
</table>

</body>
</html>

如今嘗試訪問上述 JSP,會出現以下所示結果:

相關文章
相關標籤/搜索