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