JSTL - Tag SQL <sql: transaction>

o <sql:transaction> tag é usada para agrupar o <sql:query> e <sql:update>tags em transações. Você pode colocar quantos<sql:query> e <sql:update> tags como declarações dentro do <sql:transaction> tag para criar uma única transação.

Isso garante que as modificações do banco de dados realizadas pelas ações aninhadas sejam confirmadas ou revertidas se uma exceção for lançada por qualquer ação aninhada.

Atributo

o <sql:transaction> tag tem os seguintes atributos -

Atributo Descrição Requeridos Padrão
fonte de dados Conexão de banco de dados a ser usada (substitui o padrão) Não Banco de dados padrão
isolamento Isolamento de transação (READ_COMMITTED, READ_UNCOMMITTED, REPEATABLE_READ ou SERIALIZABLE) Não Padrão do banco de dados

Exemplo

Para começar com o conceito básico, vamos criar um Students tabela no banco de dados TEST e crie alguns registros nessa tabela da seguinte forma -

Passo 1

Abra um Command Prompt e mude para o diretório de instalação da seguinte forma -

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

Passo 2

Faça login no banco de dados da seguinte forma -

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

etapa 3

Crie o Employee mesa no TEST banco de dados da seguinte forma -

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>

Criar registros de dados

Vamos agora criar alguns registros no Employee tabela da seguinte forma -

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>

Vamos agora escrever um JSP que fará uso do <sql:update> marcar junto com <sql:transaction> tag para executar um SQL UPDATEdeclaração. Aqui está o código dentro<sql:transaction> tag será executada completamente ou não será executada -

<%@ 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/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>

Acesse o JSP acima, o seguinte resultado será exibido -

+-------------+----------------+-----------------+-----------------+
|    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    |
+-------------+----------------+-----------------+-----------------+