起航学习网

- 让每个人都能学到最前沿新知识、新技能!
起航学习网
当前位置: 起航学习网 > 短期培训 > 编程语言 > Java事务回滚的实现方法

Java事务回滚的实现方法

时间:2022-08-14 14:43:56来源:零基础学Java 作者:Java学习网 已有: 名学员访问该课程

  快捷搜索:java事务回滚

前言: 调用回滚操作会撤消 Transaction(T i )所做的所有影响或修改,并终止 T i并且所有变量都将其先前的值存储起来。回滚主

调用回滚操作会撤消 Transaction(T i )所做的所有影响或修改,并终止 T i并且所有变量都将其先前的值存储起来。回滚主要是在 Transaction(T i )语句中出现一个或多个 SQL 异常时调用,然后 T i中止并从头开始。这是了解已提交和未提交的唯一方法。

SQL 异常只是表明您编写的语句中有问题,但没有提及错误的内容和位置。所以剩下的唯一选择就是调用回滚方法。

程序:它主要处理两个步骤。首先,创建一个数据库,然后处理事务。

1.创建数据库

2.执行回滚事务

导入数据库

如有必要,加载和注册驱动程序

创建新连接

创建提交/回滚语句

执行提交/回滚查询

处理结果

关闭连接,否则之前的处理可能会丢失。

第 1 步:我们还可以将数据库中的修改回滚到特定标志或保存点,只需将所需的保存点名称作为参数传递给以下方法

// 设置标志或保存点
con.rollback("MysavePoint");

第 2 步:回滚事务,使用Class的 API 方法forName(String className)加载 JDBC 驱动程序。在本例中,我们使用 Oracle

使用registerDriver( )方法注册所需的驱动程序

   // 注册需要的驱动
   DriverManager.registerDriver(new com.mysql.jdbc.Driver());

使用 DriverManager 的 getConnection() API 方法获取连接信息:

  // 获取连接
   String url = "jdbc:mysql://localhost/mydatabase/icpc"; 
   Connection conn = DriverManager.getConnection(string url, String user, String password);

使用 off connection setAutoCommit(boolean auto-commit) 方法的 API 方法禁用自动提交:

   // 将自动提交设置为 false。这将执行所有
   // SQL 语句作为单独的事务
   con.setAutoCommit(false);

现在,使用 setSavepoint() 设置保存点,或者使用连接的 API 方法 commit() 提交事务,如下所示

   保存点 savePoint = con.setSavepoint("MysavePoint"); 
   Con.commit();

如果发现任何 SQL 异常,在这种情况下,为整个事务调用 rollback() API 方法,直到之前设置的保存点:

   con.rollback() 或者,
   con。回滚(my_Savepoint);

实现:演示rollback()和commit()程序的Java程序如下

// Importing generic java libraries
import java.io.*;
// Retrieving SQL DB
// javaconnector-linkage for JDBC
import java.sql.*;
import java.sql.SQLException;
import java.sql.DriverManager;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;
import java.sql.PreparedStatement;
import java.sql.Date;
// Importing drivers(if necessarily)
// GFG class only to illustrate JDBC
// not illustrating connection class
class GFG {
	/* Step 1: Importing DB */
	// Database URL so as to create/fetch data from DB
	static String DB_URL
		= "jdbc:oracle:thin:@localhost/my_database_";
	// DB userID
	static String DB_USER = "local";
	// Remember randomly self createdDB password
	// to deal with above DB root
	static String DB_PASSWORD = "test";
	// Main driver method
	public static void main(String args[])
	{
		// Try block to check exceptions if occurs
		try {
/* Step 2: Loading and registering drivers*/
Class.forName(
	"oracle.jdbc.driver.OracleDriver");
/* Step 3: Create the new connection */
Connection conn = DriverManager.getConnection(
	DB_URL, DB_USER, DB_PASSWORD);
// set auto commit of the connection to false
conn.setAutoCommit(false);
/* Step 4: Create a statement */
// Input the info into record
String sql_
	= "INSERT INTO Employee (empid, empname) VALUES (?, ?)";
// Create a Statement_object
PreparedStatement ps
	= conn.prepareStatement(sql_);
/* Step 5: Execute a query */
// Take user input
BufferedReader br = new BufferedReader(
	new InputStreamReader(System.in));
while (true) {
	// Asking user to enter data(EmpID)
	System.out.print("Enter emp_Id: ");
	// Reading above user entered EmpID
	String s_1 = br.readLine();
	int empid = Integer.parseInt(s_1);
	// Asking user to enter data(EmpName)
	System.out.print("Enter emp_name: ");
	// Reading above user entered EmpName
	String name = br.readLine();
	// Creating entry in table
	// Set emp_id
	ps.setInt(1, empid);
	// Set emp_name
	ps.setString(2, name);
	// Execute the updation operation
	ps.executeUpdate();
	/* Step 6: Process the results */
	/* Displaying choice what user wants to do
	with updation, either Commit() or
	rollback() */
	System.out.println("commit or rollback");
	// Reading choice from user
	String answer = br.readLine();
	/* Asking user's choice for condition
	* check*/
	/* Checking if users want to commit or
	* rollback */
	// If user wants to commit
	if (answer.equals("commit")) {
		conn.commit();
	}
	// If user wants to rollback
	if (answer.equals("rollback")) {
		// Rollback the update in case if some
		// flaw in your record
		conn.rollback();
	}
	/* Display message to user for inputing next
	record if user wants to add */
	System.out.println(
		"Do you want to include more records");
	/* Asking choice */
	System.out.println("\n yes/no");
	// Read user's choice
	String answ = br.readLine();
	if (answ.equals("no")) {
		break;
	}
}
conn.commit();
// Print message
System.out.println(
	"record is successfully saved");
/* Step 7: Close the connection */
// calling commit() before closing connection
// else updation would be lost
conn.close();
		}
		// Exception handled if occurred by catch block
		catch (Exception exc) {
// Highlighting line where exception occurred
// as execution is equal
exc.printStackTrace();
		}
	}
}

输出:有两个示例输出图像涵盖了这两种情况:提交和回滚或简单地直接回滚,如下面的输出所示。

文章出自:http://qh.itpxw.cn/peixun/software/2022123769.html

文章标题:Java事务回滚的实现方法



免责声明:本站文章均由入驻起航学习网的会员所发或者网络转载,所述观点仅代表作者本人,不代表起航学习网立场。如有侵权或者其他问题,请联系举报,必删。侵权投诉

你也许会喜欢如下的文章?
(责任编辑:深圳学历教育网)
顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------
培训学校
IT培训网 访问该机构站点 报名留言 加为好友 用户等级:注册会员 用户级别:10 机构名称:IT培训网 联 系 人:罗老师 联系电话:13783581536 联系手机:13783581536 在线客服:起航学习网客服 在 线 QQ:起航学习网客服 电子邮件: 网站域名:http://www.itpxw.cn 注册时间:2016-07-18 11:07 最后登录:2024-02-20 13:02
推荐内容