JDBC中的事务管理

首先,让我们了解什么是事务。事务是一组任务或操作。它也可以看作是单个工作单元。

例如,某人预订了1500卢比的机票,那么此事务将是这样。

人员帐户(P)

  1. 开户(P)

  2. 旧余额= P.balance

  3. 新余额= P.balance-1500

  4. P.balance =新余额

  5. 关闭账户(P)

该金额将添加到飞机帐户中。

通过使用ACID属性,可以更好地理解事务管理。ACID代表原子性,一致性,隔离性和耐久性。首先让我们了解这些术语。

1)原子性:由于Transaction是一组操作,因此此属性可确保执行事务的所有操作或不执行任何操作。事务绝不能被部分提交。

2)一致性:一致性是指数据库的状态,即数据库中的数据在事务之后或之前必须保持相同,不会对任何事务的数据库造成任何不利影响。数据库必须保持与执行事务之前相同的状态。

3)隔离:因为在数据库中许多事务是同时执行的,所以此属性确保每个事务都将被执行,就好像它是系统中唯一的事务一样。任何事务都不应影响任何其他事务,事务必须是独立的。

4)耐用性:即使系统发生故障,崩溃或断电等情况,耐用性属性也可以使数据库保存更新的数据。如果事务成功提交并成功进行并更改了数据,但由于某种原因系统失败并且无法将其写入到数据库中。磁盘上,数据库仍将保留更新的数据,并在系统重启后对其进行更新。

这全部与事务的ACID属性有关。现在让我们来看一个使用JDBC的事务管理的例子。

首先,您必须在数据库中创建一个名为“ employee”的表。在其中添加以下字段。

Java事务管理数据库

这是将存储员工数据的表。

这是JDBC中用于事务管理的eclipse类。

package logicProgramming;
import java.io.DataInputStream; //从用户处获取输入
import java.sql.Connection;     //建立连接
import java.sql.DriverManager; 
import java.sql.Statement;

public class ExampleTransaction {
	public static void main(String[] args) {
		try {
			Class.forName("com.mysql.jdbc.Driver");
			Connection cn=DriverManager.getConnection("jdbc:mysql://localhost:3306/Employee","root", "123");
			cn.setAutoCommit(false);   //// HIghLighted方法已启用true事务处理方法已禁用.....-
			Statement smt=cn.createStatement();
			DataInputStream kb=new DataInputStream(System.in);
			System.out.println("Enter Employee Id");
			int id=Integer.parseInt(kb.readLine());
			System.out.println("Enter Employee Name");
			String name=(kb.readLine());
			System.out.println("Enter Employee Position ");
			String pos=(kb.readLine());
			System.out.println("Enter Salary");
			String salary =(kb.readLine());
			String query="insert into employee values("+id+",'"+name+"','"+pos+"','"+salary+"')";
			smt.executeUpdate(query);
			System.out.println("Do You Want to Commit Transaction \n1.Yes\n2.No");
			String ans=kb.readLine();
			if(ans.equalsIgnoreCase("Yes")||ans.equalsIgnoreCase("1"))
			{
				cn.commit(); //提交事务
				System.out.println("Transaction SuccessFully Commited...");
			}
			else
			{
				cn.rollback();
				System.out.println("Transaction Rollbacked......");
			}
		}
		catch(Exception e)
		{
			System.out.println(e.getMessage());
		}
	}
}

此代码的输出将如下所示:

Java-事务管理示例输出