<sql:transaction> ট্যাগটি <sql:query> এবং <sql:update> ট্যাগগুলোকে ট্রানজ্যাকশনে গ্রুপ করতে ব্যবহৃত হয়। আপনি <sql:transaction> ট্যাগের ভিতরে যতেক::<sql:query> এবং <sql:update> ট্যাগ চান ততেকটি স্টেটমেন্ট হিসেবে রাখে একটি একক ট্রানজ্যাকশন তৈরি করতে পারেন।
এটি নিশ্চিত করে যে নেস্টেড অ্যাকশনগুলো দ্বারা করা ডেটাবেস মডিফিকেশনগুলো হয় কমিট হবে নাকি রোলব্যাক হবে যদি কোনো নেস্টেড অ্যাকশন এক্সসেপশন থ্রো করে।
অ্যাট্রিবিউট
<sql:transaction> ট্যাগটির নিম্নলিখিত অ্যাট্রিবিউটগুলো রয়েছে:
| অ্যাট্রিবিউট | বিবরণ | আবশ্যক | ডিফল্ট |
|---|---|---|---|
| dataSource | ব্যবহার 할 ডেটাবেস কানেকশন (ডিফল্ট ওভাররাইড করে) | নয় | ডিফল্ট ডেটাবেস |
| isolation | ট্রানজ্যাকশন আইসোলেশন (READ_COMMITTED, READ_UNCOMMITTED, REPEATABLE_READ, বা SERIALIZABLE) | নয় | ডেটাবেসের ডিফল্ট |
উদাহরণ
বেসিক কনসেপ্ট বোঝার জন্য, TEST ডেটাবেসে একটি Students টেবিল তৈরি করে সেটাতে কিছু রেকর্ড डालি:
স্টেপ ১
একটি Command Prompt খুলুন এবং ইনস্টলেশন ডিরেক্টরিতে যান:
C:\> C:\>cd Program Files\MySQL\bin C:\Program Files\MySQL\bin>
স্টেপ ২
ডেটাবেসে লগইন করুন:
C:\Program Files\MySQL\bin>mysql -u root -p Enter password: ******** mysql>
স্টেপ ৩
TEST ডেটাবেসে Employee টেবিল তৈরি করুন:
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>
ডেটা রেকর্ড তৈরি
Employee টেবিলে কিছু রেকর্ড তৈরি করুন:
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>
এখন একটি JSP লিখি যা <sql:update> ট্যাগের সাথে <sql:transaction> ট্যাগ ব্যবহার করে একটি SQL UPDATE স্টেটমেন্ট এক্সিকিউট করবে। এখানে <sql:transaction> ট্যাগের ভিতরের কোড либо পুরোপুরি এক্সিকিউট হবে নাকি একদমই না:
<%@ 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>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>
উপরোক্ত JSP অ্যাক্সেস করলে নিম্নলিখিত ফলাফল দেখাবে:
+-------------+----------------+-----------------+-----------------+ | 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 | +-------------+----------------+-----------------+-----------------+