概述
对事务捕获异常的处理
大致思路:
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中对事务的处理所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复