Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Lập Trình

Cách nhóm các truy vấn sử dụng transaction trong JSP?

Thẻ <sql:transaction> được sử dụng để nhóm các thẻ <sql:query> và <sql:update> thành các giao dịch. Bạn có thể đặt bao nhiêu thẻ <sql:query> và <sql:update> làm câu lệnh bên trong thẻ <sql:transaction> để tạo một giao dịch duy nhất.

Nó đảm bảo rằng các sửa đổi cơ sở dữ liệu được thực hiện bởi các hành động lồng nhau hoặc được commit hoặc roll back nếu một ngoại lệ được ném bởi bất kỳ hành động lồng nào.

Các thuộc tính

Thẻ <sql:transaction> có các thuộc tính sau:

Thuộc tính Mô tả Bắt buộc Mặc định
dataSource Kết nối cơ sở dữ liệu sử dụng (ghi đè mặc định) Không Cơ sở dữ liệu mặc định
isolation Cô lập giao dịch (READ_COMMITTED, READ_UNCOMMITTED, REPEATABLE_READ, hoặc SERIALIZABLE) Không Mặc định của cơ sở dữ liệu

Ví dụ

Để bắt đầu với khái niệm cơ bản, hãy tạo một bảng Students trong cơ sở dữ liệu TEST và tạo một vài bản ghi như sau:

Bước 1

Mở Command Prompt và chuyển đến thư mục cài đặt như sau:

C:\> C:\>cd Program Files\MySQL\bin C:\Program Files\MySQL\bin>

Bước 2

Đăng nhập vào cơ sở dữ liệu như sau:

C:\Program Files\MySQL\bin>mysql -u root -p Enter password: ******** mysql>

Bước 3

Tạo bảng Employee trong cơ sở dữ liệu TEST như sau:

mysql> use TEST; mysql> create table Students ( id int not null, first varchar (255), last varchar (255), dob date ); Query OK, 0 rows affected (0.08 sec) mysql>

Tạo bản ghi dữ liệu

Chúng ta sẽ tạo một vài bản ghi trong bảng Employee như sau:

mysql> INSERT INTO Students VALUES (100, 'Zara', 'Ali', '2002/05/16'); Query OK, 1 row affected (0.05 sec) mysql> INSERT INTO Students VALUES (101, 'Mahnaz', 'Fatma', '1978/11/28'); Query OK, 1 row affected (0.00 sec) mysql> INSERT INTO Students VALUES (102, 'Zaid', 'Khan', '1980/10/10'); Query OK, 1 row affected (0.00 sec) mysql> INSERT INTO Students VALUES (103, 'Sumit', 'Mittal', '1971/05/08'); Query OK, 1 row affected (0.00 sec) mysql>

Bây giờ hãy viết một JSP sử dụng thẻ <sql:update> cùng với <sql:transaction> để thực thi câu lệnh SQL UPDATE. Code bên trong thẻ <sql:transaction> sẽ được thực thi hoàn toàn hoặc không thực thi gì cả:

<%@ page import = "java.io.*,java.util.*,java.sql.*"%>
<%@ page import = "javax.servlet.http.*,javax.servlet.*"%>
<%@ page import = "java.util.Date,java.text.*" %>
<%@ taglib uri = "https://java.sun.com/jsp/jstl/core" prefix = "c"%>
<%@ taglib uri = "https://java.sun.com/jsp/jstl/sql" prefix = "sql"%>
<html>
   <head>
        <title>Thẻ JSTL sql:transaction</title>
   </head>
   <body>
      <sql:setDataSource var = "snapshot" driver = "com.mysql.jdbc.Driver"
         url = "jdbc:mysql://localhost/TEST" user = "root" password = "cohondob"/>
      <%          Date DoB = new Date("2001/12/16");          int studentId = 100;       %>
      <sql:transaction dataSource = "${snapshot}">
         <sql:update var = "count">
            UPDATE Students SET last = 'Ali' WHERE Id = 102
         </sql:update>
         <sql:update var = "count">
            UPDATE Students SET last = 'Shah' WHERE Id = 103
         </sql:update>
         <sql:update var = "count">
            INSERT INTO Students
            VALUES (104,'Nuha', 'Ali', '2010/05/26');
         </sql:update>
      </sql:transaction>
      <sql:query dataSource = "${snapshot}" var = "result">
         SELECT * from Students;
      </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>

Truy cập JSP trên, kết quả sau sẽ được hiển thị:

+-------------+----------------+-----------------+-----------------+
| Emp ID      | First Name     | Last Name       | DoB             |
+-------------+----------------+-----------------+-----------------+
| 100         | Zara           | Ali             | 2001-12-16      |
| 101         | Mahnaz         | Fatma           | 1978-11-28      |
| 102         | Zaid           | Ali             | 1980-10-10      |
| 103         | Sumit          | Mittal          | 1971-05-08      |
| 104         | Nuha           | Ali             | 2010-05-26      |
+-------------+----------------+-----------------+-----------------+