📅  最后修改于: 2020-10-13 01:33:01             🧑  作者: Mango
交易代表一个工作单元。
ACID属性很好地描述了事务管理。 ACID代表原子性,一致性,隔离性和持久性。
原子性意味着全部成功或没有成功。
一致性确保将数据库从一种一致状态带到另一种一致状态。
隔离确保事务与其他事务隔离。
持久性是指一旦事务被提交,即使在发生错误,断电等情况下,事务也将保持不变。
快速的性能由于提交时命中了数据库,因此可以提高性能。
在JDBC中,Connection接口提供了管理事务的方法。
Method | Description |
---|---|
void setAutoCommit(boolean status) | It is true bydefault means each transaction is committed bydefault. |
void commit() | commits the transaction. |
void rollback() | cancels the transaction. |
让我们看一下使用Statement进行事务管理的简单示例。
import java.sql.*;
class FetchRecords{
public static void main(String args[])throws Exception{
Class.forName("oracle.jdbc.driver.OracleDriver");
Connection con=DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:xe","system","oracle");
con.setAutoCommit(false);
Statement stmt=con.createStatement();
stmt.executeUpdate("insert into user420 values(190,'abhi',40000)");
stmt.executeUpdate("insert into user420 values(191,'umesh',50000)");
con.commit();
con.close();
}}
如果您看到表emp400,您将看到已添加2条记录。
让我们看一下使用PreparedStatement进行事务管理的简单示例。
import java.sql.*;
import java.io.*;
class TM{
public static void main(String args[]){
try{
Class.forName("oracle.jdbc.driver.OracleDriver");
Connection con=DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:xe","system","oracle");
con.setAutoCommit(false);
PreparedStatement ps=con.prepareStatement("insert into user420 values(?,?,?)");
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
while(true){
System.out.println("enter id");
String s1=br.readLine();
int id=Integer.parseInt(s1);
System.out.println("enter name");
String name=br.readLine();
System.out.println("enter salary");
String s3=br.readLine();
int salary=Integer.parseInt(s3);
ps.setInt(1,id);
ps.setString(2,name);
ps.setInt(3,salary);
ps.executeUpdate();
System.out.println("commit/rollback");
String answer=br.readLine();
if(answer.equals("commit")){
con.commit();
}
if(answer.equals("rollback")){
con.rollback();
}
System.out.println("Want to add more records y/n");
String ans=br.readLine();
if(ans.equals("n")){
break;
}
}
con.commit();
System.out.println("record successfully saved");
con.close();//before closing connection commit() is called
}catch(Exception e){System.out.println(e);}
}}
它将要求添加更多记录,直到您按n。如果按n,则提交事务。