大战熟女丰满人妻av-荡女精品导航-岛国aaaa级午夜福利片-岛国av动作片在线观看-岛国av无码免费无禁网站-岛国大片激情做爰视频

專注Java教育14年 全國咨詢/投訴熱線:400-8080-105
動力節(jié)點(diǎn)LOGO圖
始于2009,口口相傳的Java黃埔軍校
首頁 學(xué)習(xí)攻略 Java學(xué)習(xí) Java事務(wù)回滾的實(shí)現(xiàn)方法

Java事務(wù)回滾的實(shí)現(xiàn)方法

更新時間:2022-07-11 12:49:17 來源:動力節(jié)點(diǎn) 瀏覽6509次

調(diào)用回滾操作會撤消 Transaction(T i )所做的所有影響或修改,并終止 T i并且所有變量都將其先前的值存儲起來。回滾主要是在 Transaction(T i )語句中出現(xiàn)一個或多個 SQL 異常時調(diào)用,然后 T i中止并從頭開始。這是了解已提交和未提交的唯一方法。

SQL 異常只是表明您編寫的語句中有問題,但沒有提及錯誤的內(nèi)容和位置。所以剩下的唯一選擇就是調(diào)用回滾方法。

程序:它主要處理兩個步驟。首先,創(chuàng)建一個數(shù)據(jù)庫,然后處理事務(wù)。

1.創(chuàng)建數(shù)據(jù)庫

2.執(zhí)行回滾事務(wù)

導(dǎo)入數(shù)據(jù)庫

如有必要,加載和注冊驅(qū)動程序

創(chuàng)建新連接

創(chuàng)建提交/回滾語句

執(zhí)行提交/回滾查詢

處理結(jié)果

關(guān)閉連接,否則之前的處理可能會丟失。

第 1 步:我們還可以將數(shù)據(jù)庫中的修改回滾到特定標(biāo)志或保存點(diǎn),只需將所需的保存點(diǎn)名稱作為參數(shù)傳遞給以下方法

// 設(shè)置標(biāo)志或保存點(diǎn)
con.rollback("MysavePoint");

第 2 步:回滾事務(wù),使用Class的 API 方法forName(String className)加載 JDBC 驅(qū)動程序。在本例中,我們使用 Oracle

使用registerDriver( )方法注冊所需的驅(qū)動程序

   // 注冊需要的驅(qū)動
   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 方法禁用自動提交:

   // 將自動提交設(shè)置為 false。這將執(zhí)行所有
   // SQL 語句作為單獨(dú)的事務(wù)
   con.setAutoCommit(false);

現(xiàn)在,使用 setSavepoint() 設(shè)置保存點(diǎn),或者使用連接的 API 方法 commit() 提交事務(wù),如下所示

   保存點(diǎn) savePoint = con.setSavepoint("MysavePoint"); 
   Con.commit();

如果發(fā)現(xiàn)任何 SQL 異常,在這種情況下,為整個事務(wù)調(diào)用 rollback() API 方法,直到之前設(shè)置的保存點(diǎn):

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

實(shí)現(xiàn):演示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();
		}
	}
}

輸出:有兩個示例輸出圖像涵蓋了這兩種情況:提交和回滾或簡單地直接回滾,如下面的輸出所示。

提交申請后,顧問老師會電話與您溝通安排學(xué)習(xí)

免費(fèi)課程推薦 >>
技術(shù)文檔推薦 >>
主站蜘蛛池模板: 久久国产精品国产精品 | 国产在线精品观看一区 | 奇米影视四色狠狠888俺去啦 | 国产一区二区免费在线观看 | 国产在线激情视频 | 国产伦精品一区二区三区免费迷 | 国产片一区二区三区 | 青青久久久国产线免观 | se视频在线 | 免费精品美女久久久久久久久 | 日本人hdxxxxvideo | 欧美亚洲三级 | 日韩一中文字幕 | 高清国产性色视频在线 | 久久456| 亚州国产视频 | 一级国产精品一级国产精品片 | 99精品99 | 国产精品午夜免费福利视频 | 天天干天天曰 | 久久影院在线 | 亚洲精品久久片久久 | 亚洲色欧美 | 四虎国产成人免费观看 | 中文一级国产特级毛片视频 | 久久xxx| 香蕉在线观看999 | 日韩精品无码一区二区三区 | 成人亚洲视频在线观看 | 国产一极毛片 | 欧日韩在线不卡视频 | 欧美一区高清 | 色爱区综合激情五月综合色 | 国产99对白在线播放 | 99久久精品免费观看区一 | 欧美成人久久久 | 亚洲精品一区二区三区婷婷月 | 亚洲欧美日韩一区二区 | 欧美久久久久 | 在线观看h片 | 一区二区三区在线视频播放 |