jstl <sql:transaction>標籤

2019-10-16 22:12:30

<sql:transaction>標籤用於將<sql:query><sql:update>標籤分組到事務中。可以將<sql:query><sql:update>標籤作為語句放在<sql:transaction>標籤內,以建立單個事務。

它確保巢狀操作執行的資料庫修改是通過任何巢狀操作丟擲異常來提交或回滾。

屬性

<sql:transaction>標籤具有以下屬性 -

屬性 描述 必需 預設
dataSource 要使用的資料庫連線(覆蓋預設值) 預設資料庫
isolation 事務隔離(READ_COMMITTEDREAD_UNCOMMITTEDREPEATABLE_READSERIALIZABLE) 資料庫的預設值

範例

在這個範例中,我們從基礎概念和操作開始,在testdb資料庫中建立一個student表,並在該表中建立幾個記錄,參考以下SQL語句:

DROP TABLE IF EXISTS `student`;
CREATE TABLE `student` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `name` varchar(64) NOT NULL DEFAULT '',
  `sex` char(3) NOT NULL DEFAULT '0',
  `birthday` date DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=4 DEFAULT CHARSET=utf8;

-- ----------------------------
-- Records of student
-- ----------------------------
INSERT INTO `student` VALUES ('1', '馬得力', '男', null);
INSERT INTO `student` VALUES ('2', '張小玲', '女', '2001-10-25');
INSERT INTO `student` VALUES ('3', '李雙達', '男', '2000-10-25');

現在編寫一個JSP,它將使用<sql:update>標籤以及<sql:transaction>標籤來執行SQL UPDATE語句。 這裡的<sql:transaction>標籤中的程式碼將被完全執行或一條語句都不會執行,檔案:sql_transaction.jsp 如下所示:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ page import="java.io.*,java.util.*,java.sql.*"%>
<%@ 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"%>
<!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:transaction標籤範例</title>
</head>
<body>
    <div style="margin: auto; width: 90%">
        <h2>sql:transaction標籤範例</h2>
        <sql:setDataSource var="connection" driver="com.mysql.jdbc.Driver"
            url="jdbc:mysql://localhost/testdb?useSSL=false&characterEncoding=utf8"
            user="root" password="123456" />

        <%
            Date DoB = new Date("2001/11/14");
        %>

        <sql:transaction dataSource="${connection}">
            <sql:update var="count">
            UPDATE student SET name = '趙子龍' WHERE id = 2
         </sql:update>

            <sql:update var="count">
            UPDATE student SET sex = '未知' WHERE id = 1
         </sql:update>

            <sql:update var="count">
            INSERT INTO student 
            VALUES (4,'關羽','男' , '1998/09/09');
         </sql:update>
        </sql:transaction>

        <!-- 執行查詢語句 -->
        <sql:query dataSource="${connection}" var="result">
            SELECT * from student;
         </sql:query>

        <table border="1" width="100%">
            <tr>
                <th>編號</th>
                <th>名字</th>
                <th>性別</th>
                <th>出生日期</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.sex}" /></td>
                    <td><c:out value="${row.birthday}" /></td>
                </tr>
            </c:forEach>
        </table>
    </div>
</body>
</html>

注意:需要將MySQL的連線驅動程式:mysql-connector-java-5.1.40-bin.jar放入到{Webpp}/WEB-INFO/lib目錄下。

執行上述專案程式碼,得到以下結果如下 -