Balise <sql:transaction>

JSP 标准标签库Bibliothèque de balises standard JSP

La balise <sql:transaction> est utilisée pour encapsuler les balises <sql:query> et <sql:update> dans une transaction. Vous pouvez placer un grand nombre d’opérations <sql:query> et <sql:update> à l’intérieur de <sql:transaction> pour en faire une seule transaction.

Elle garantit que les modifications apportées à la base de données sont soit validées, soit annulées.

Format de syntaxe

<sql:transaction dataSource="<string>" isolation="<string>"/>

Attributes

La balise <sql:transaction> possède les attributs suivants :

Attribut Description Obligatoire ? Valeur par défaut
dataSource La base de données à utiliser (remplace celle par défaut) non Base de données par défaut
isolation Niveau d’isolation de la transaction (READ_COMMITTED, READ_UNCOMMITTED, REPEATABLE_READ ou SERIALIZABLE) non Valeur par défaut de la base de données


Démonstration d'exemple

Tout d'abord, vous devez créer une table Employees dans la base de données TEST, puis ajouter quelques enregistrements à la table. Les étapes spécifiques sont les suivantes :

Étape 1 :

Ouvrez CMD et positionnez-vous dans le répertoire d'installation :

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

Étape 2 :

Connectez-vous à la base de données :

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

Étape 3 :

Créez une table Students dans la base de données TEST :

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>

Créer des enregistrements de données :

Enfin, créez quelques enregistrements dans la table Students :

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>

Écrivez maintenant un fichier JSP en utilisant <sql:update> et <sql:transaction> pour exécuter l’instruction SQL UPDATE. Le code à l’intérieur de <sql:transaction> s’exécute soit complètement, soit pas du tout :

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ 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>

La sortie est la suivante :

sql-transcation


JSP 标准标签库Bibliothèque de balises standard JSP

Autres extensions