交易代表一个工作单元。
ACID属性很好地描述了事务管理。 ACID代表原子性, 一致性, 隔离性和持久性。
原子性意味着全部成功或没有成功。
一致性确保将数据库从一种一致状态带到另一种一致状态。
隔离确保事务与其他事务隔离。
持久性是指一旦事务已提交, 即使在发生错误, 断电等情况下, 事务也将保持不变。
交易管理的优势
快速性能由于提交时数据库被命中, 因此可以提高性能。
文章图片
在JDBC中, Connection接口提供了管理事务的方法。
方法 | 描述 |
---|---|
void setAutoCommit(boolean status) | 默认情况下为true, 表示每个事务均默认提交。 |
void commit() | 提交事务。 |
void rollback() | 取消交易。 |
让我们看一下使用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);
}}}
【JDBC中的事务管理】在按n之前, 它将要求添加更多记录。如果按n, 则提交事务。
推荐阅读
- 在Oracle数据库中存储映像的示例
- 在Oracle数据库中存储文件的示例
- Java数据库连接的5个步骤
- Java Statement接口
- 从Oracle数据库检索文件的示例
- Java ResultSetMetaData接口
- Java ResultSet接口
- JDBC驱动程序
- Java PreparedStatement接口