我是靠谱客的博主 乐观糖豆,最近开发中收集的这篇文章主要介绍JDBC中对事务的处理,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

对事务捕获异常的处理

大致思路:

​try {	
    set autocommit =0; //在事务结束之前的所有DML处于同一个事务中。	
    update account set money=money-100 where card_id='1234567890';	
    update account set money=moy-100 where card_id='0515151515';	
    commit; //提交事务,将DML语句执行结果持久化到磁盘。
}catch() {	
    rollback;    
}
​

首先开启事务,然后执行DML操作,如果所有的DML操作都正确执行,则使用commit提交事务;如果有的DML操作不能正确执行,则捕获该异常,跳过commit提交事务语句,在catch语句块中使用rollback回滚事务。

JDBC------Java DataBase Connectivity

代码中SQL语句正确的情况

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

public class Test {

	public static void main(String[] args) {

		Connection connection = null;
		Statement statement = null;

		try {
			Class.forName("com.mysql.jdbc.Driver");
			connection = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/test", "root", "root");
			statement = connection.createStatement();
			connection.setAutoCommit(false);
			statement.addBatch("update account set money=money-100 where card_id= '1234567890'");
			statement.addBatch("update account set money=money+100 where card_id= '0987654321'");
			System.out.println(111111);
			statement.executeBatch();
			connection.commit();
		} catch (Exception e) {
			System.out.println(111);
			try {
				//防止空指针异常				
				if (connection !=null) {
					connection.rollback();
				}
			} catch (SQLException e1) {
				e1.printStackTrace();
			}
			e.printStackTrace();
		} finally {
			try {
				if (statement != null) {
					statement.close();
				}
			} catch (SQLException e1) {
				e1.printStackTrace();
			}
			try {
				if (connection != null) {
					connection.close();
				}
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}

	}

}

上面代码运行结果为:111111  ------>说明执行了上面代码中try{}语句块的内容。执行完成事务提交

数据库中原始的money字段的数据是1000,0,执行完代码后的结果是:

代码中其中一条SQL语句出错的情况

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

public class Test {

	public static void main(String[] args) {

		Connection connection = null;
		Statement statement = null;

		try {
			Class.forName("com.mysql.jdbc.Driver");
			connection = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/test", "root", "root");
			statement = connection.createStatement();
			connection.setAutoCommit(false);
			statement.addBatch("update account set money=money-100 where card_id= '1234567890'");
			statement.addBatch("update account set money=mon+100 where card_id= '0987654321'");
			System.out.println(111111);
			statement.executeBatch();
			connection.commit();
		} catch (Exception e) {
			System.out.println(111);
			try {
				// 防止空指针异常
				if (connection != null) {
					connection.rollback();
				}
			} catch (SQLException e1) {
				e1.printStackTrace();
			}
			e.printStackTrace();
		} finally {
			try {
				if (statement != null) {
					statement.close();
				}
			} catch (SQLException e1) {
				e1.printStackTrace();
			}
			try {
				if (connection != null) {
					connection.close();
				}
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}

	}

}

上面代码运行结果为:

数据库中原始的money字段的数据是1000,0,执行完代码后的结果是:

由于其中一条SQL语句出错,则会被catch语句捕捉,打印对应异常信息,事务回滚,导致SQL语句对应的操作失败,上述输出结果则印证了这一点。 

最后

以上就是乐观糖豆为你收集整理的JDBC中对事务的处理的全部内容,希望文章能够帮你解决JDBC中对事务的处理所遇到的程序开发问题。

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

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

评论列表共有 0 条评论

立即
投稿
返回
顶部