zoukankan      html  css  js  c++  java
  • java学习笔记之事务

    事务

    一.什么是事务?

      就是执行一组sql指令,这组sql指令要么全部执行成功,只要有一个失败,则全部失败

    二.事务的操作

      注意:和事务操作相关的都是Connection 的方法

         同一个事务需要同一个Connection实现类对象

      流程:

        开启事务:

          con.setAutoCommit(false);//关闭自动提交

                    true 开启自动提交

        提交事务

          con.commit();

        回滚事务

          con.rollback();

        转账小案例的分析:

     2     try
     3     {   //开启事务:之后系统会将以下所有的sql的执行当做一个整体
     4         int i = update:-100
     5         int j = update:+100
     6         if(i > 0 && j > 0){
     7            //提交事务:当所有的sql指令都执行成功之后,提交事务-> 所有对数据库的操作将永久生效,不可更改
     8            System.out.println("转账成功!");
     9         }
    10     }catch (Exception e)
    11     {
    12          //回滚事务:当你的事务中出现问题,没有全部执行执行成功,则回顾事务,这样之前对数据库的所有操作就被撤销
    13     }

      代码demo:

     1 public class Demo {
     2     public static void main(String[] args){
     3         Connection con=null;
     4         try{
     5             QueryRunner qr = new QueryRunner();
     6             con=C3P0Utils.getConnection();
     7             //开启事务
     8             con.setAutoCommit(false);
     9             int re1 = qr.update("update account set money=money-? where id=?",300,342);
    10             int re2 = qr.update("update account set money=money+? where id=?",300,345);
    11             if(re1>0&&re2>0){
    12                 //都执行成功提交事务
    13                 con.commit();
    14             }else{
    15                 //执行失败手动回滚事务
    16                 con.rollback();
    17             }
    18         }catch(Exception e){
    19             //发生异常回滚事务
    20             try {
    21                 con.rollback();
    22             } catch (SQLException e1) {
    23                 // TODO Auto-generated catch block
    24                 e1.printStackTrace();
    25             }
    26         }finally {
    27             try {
    28                 //将连接放回连接池
    29                 con.close();
    30             } catch (SQLException e) {
    31                 // TODO Auto-generated catch block
    32                 e.printStackTrace();
    33             }
    34         }
    35     }
    36 }
  • 相关阅读:
    使用Wireshark 抓取数据包
    React Native 开发之 (07) 常用组件-View
    Swift开发之 (01) 语法
    React Native 开发之 (05) flexbox布局
    React Native 开发之 (06) JSX
    深入浅出Redis02 使用Redis数据库(String类型)
    React Native 开发之 (04) 例子讲解
    npm命令大全
    npm
    node.js
  • 原文地址:https://www.cnblogs.com/xuzhaocai/p/8207323.html
Copyright © 2011-2022 走看看