📜  Java JDBC中的事务管理

📅  最后修改于: 2020-10-13 01:33:01             🧑  作者: Mango

JDBC中的事务管理

交易代表一个工作单元。

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在jdbc中进行事务管理的简单示例

让我们看一下使用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在JDBC中进行事务管理的示例

让我们看一下使用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,则提交事务。