我是靠谱客的博主 沉默帅哥,最近开发中收集的这篇文章主要介绍JDBC事务的回滚(rollback方法和setAutoCommit方法的使用),觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

先来解释一下什么叫做事务。

      事务:一个事件的完成需要好几个步骤完成后才算这个事情真正的完成。例如,你用支付宝给别人转上一笔钱,其操作的完成是,你给他转一笔钱后,1.你的支付上面显示少了500,2.然后他的支付宝上显示多了500,此时这个事件才算完成。而转钱就是一个事务,其中的1和2是它的两个步骤。假如其中有那个显示未更新就会出现错误,那么如何避免????

接下里我们就看一下事务如何操作。

首先我们要了解的是在我们利用JAVA代码去获取连接数据库对象,然后获取sql命令对象,去执行sql命令,其中对于增删改对其操作是执行后默认直接提交的,而在oracle数据库第三方插件的界面操作上是会给反悔的机会,也就是说你可以将数据恢复到原来没有改变之前。

体会一下oracle PL/SQL界面的回滚:

 

现在执行  update student set age = 15 where sno=2  的sql语句

 

 

按下回滚按钮后,再去查询此表:

 在JAVA代码操控数据库,也有方法去提供这样的机制,用来解决事务问题,如果几个步骤都成功就统一改变数据库的数据,没有就回滚,恢复到前面的数据的。

其利用的是一组方法:

setAutoCommit():是在获取数据库连接对象后,将其执为手动提交。

rollback():执行未成功就回滚。

commit():执行成功后进行手动提交。

接下里编一个小例子:

先在oracle里面建立一个表:

package cn.liu.jbdc;


import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;

/**
 * JDBC的事务管理:
 * 		转账业务
 * 示例:
 * 		小王给小明转账1000元.
 * 
 */
public class Demo_RoolBack {
	public static void main(String[] args) throws ClassNotFoundException, SQLException {
		String driverPackage = "oracle.jdbc.driver.OracleDriver";
		String url = "jdbc:oracle:thin://@DESKTOP-F4QSNQL:1521/XE";
		String user = "scott";
		String password = "qwer";
		//4.创建sql命令(小王给小明转1000元)
		String sql1 = "update AA set 余额=余额-1000 where 编号=1";//小王减少1000元
		String sql2 = "update AA set 余额=余额+1000 where 编号=8";//小明增加1000元
		
		//1.加载驱动包
		Class.forName(driverPackage);
		//2.获取数据库连接对象
		Connection conn = DriverManager.getConnection(url,user ,password);
		//conn.setAutoCommit(false);//设置手动提交
		//3.连接sql命令对象
		Statement state = conn.createStatement();
		//5.执行sql命令
		int i = state.executeUpdate(sql1);
		int j = state.executeUpdate(sql2);
		System.out.println(i+"------"+j);
		/*
		if(i>0&&j>0) {
			conn.commit();
		}else {
			conn.rollback();
		}
		*/
		//6.关闭相关资源
		state.close();
		conn.close();
	}
}

 显然可以看到sql语句一条是正确的,一条错误的,如果没有回滚的事务管理的话,应该一条执行,一条出错。

我们执行后看效果:

 

现在执行正确的sql语句(只是sql语句改变了,其他得没有变):

​
package cn.liu.jbdc;


import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;

public class Demo_RoolBack {
	public static void main(String[] args) throws ClassNotFoundException, SQLException {
		String driverPackage = "oracle.jdbc.driver.OracleDriver";
		String url = "jdbc:oracle:thin://@DESKTOP-F4QSNQL:1521/XE";
		String user = "scott";
		String password = "qwer";
		//4.创建sql命令(小王给小明转1000元)
		String sql1 = "update AA set 余额=余额-1000 where 编号=1";//小王减少1000元
		String sql2 = "update AA set 余额=余额+1000 where 编号=2";//小明增加1000元
		
		//1.加载驱动包
		Class.forName(driverPackage);
		//2.获取数据库连接对象
		Connection conn = DriverManager.getConnection(url,user ,password);
		conn.setAutoCommit(false);//设置手动提交
		//3.连接sql命令对象
		Statement state = conn.createStatement();
		//5.执行sql命令
		int i = state.executeUpdate(sql1);
		int j = state.executeUpdate(sql2);
		System.out.println(i+"------"+j);
		if(i>0&&j>0) {
			conn.commit();
		}else {
			conn.rollback();
		}
		//6.关闭相关资源
		state.close();
		conn.close();
		
	}
}

​

 此时oracle此表的数据:

所以,以后有增删改的时候,最好加上事务管理。

最后

以上就是沉默帅哥为你收集整理的JDBC事务的回滚(rollback方法和setAutoCommit方法的使用)的全部内容,希望文章能够帮你解决JDBC事务的回滚(rollback方法和setAutoCommit方法的使用)所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(56)

评论列表共有 0 条评论

立即
投稿
返回
顶部