JDBC中的事务管理

事务代表一个单独的工作单位

ACID属性很好地描述了事务管理。ACID代表原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)和持久性(Durability)。

原子性意味着要么全部成功,要么全部失败。

一致性确保将数据库从一致状态带到另一个一致状态。

隔离性确保事务与其他事务隔离。

持久性意味着一旦事务提交,即使发生错误、断电等情况,它也会保持提交状态。

事务管理的优点

快速性能:由于在提交时访问数据库,因此性能较快。

在JDBC中,Connection接口提供了管理事务的方法。

方法描述
void setAutoCommit(boolean status)默认为true,表示每个事务默认都是提交的。
void commit()提交事务。
void rollback()取消事务。

使用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();
}}

如果查看user420表,您将看到已添加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键,事务将被提交。

标签: java, Java面试题, Java下载, java教程, java技术, Java学习, Java学习教程, Java语言, Java开发, Java入门教程, Java进阶教程, Java高级教程, Java笔试题, Java编程思想