• 简单的事务分析及使用


    事务的4大特性:

    1 :原子性(atomicity):事务是数据库的逻辑工作单位,而且是必须是原子工作单位,对于其数据修改,要么全部执行,要么全部不执行。

    2 :一致性(consistency):事务在完成时,必须是所有的数据都保持一致状态。在相关数据库中,所有规则都必须应用于事务的修改,以保持所有  数据的完整性。(实例:转账,两个账户余额相加,值不变。)

    3 :隔离性(isolation):一个事务的执行不能被其他事务所影响。

    4 : 持久性(durability):一个事务一旦提交,事物的操作便永久性的保存在DB中。即便是在数据库系统遇到故障的情况下也不会丢失提交事务的操作。

    java事务的类型有三种:JDBC事务、JTA(Java Transaction API)事务、容器事务。这里要说明的是jdbc事务:

    案例:jack要把自己账户的一百元转给rose

    数据库操作:

    1 SELECT * FROM bank;
    2 
    3 --数据库里面的事务  rollback是事务的回滚  commit是提交事务
    4 BEGIN;
    5 UPDATE bank SET bmoney=bmoney-100 WHERE bname='jack';
    6 UPDATE bank SET bmoney=bmoney+100 WHERE bname='rose';
    7 COMMIT;

     java代码处理:

     1 public class testTransaction {
     2 
     3     static String url = "jdbc:mysql://127.0.0.1:3306/week11?useUnicode=true&characterEncoding=utf-8&useSSL=false";
     4     static String name = "root";
     5     static String pass = "root";
     6 
     7     public static void main(String[] args) {
     8 
     9         Connection connection = null;
    10         PreparedStatement ps = null;
    11         ResultSet rs = null;
    12 
    13         // 加载驱动
    14         try {
    15             Class.forName("com.mysql.jdbc.Driver");
    16 
    17             // 获取连接
    18             connection = (Connection) DriverManager.getConnection(url, name, pass);
    19 
    20             //关闭事务的自动提交,我们手动提交事务
    21             connection.setAutoCommit(false);
    22             
    23             // java里面的事务  jack把自己的100块钱给rose
    24             // jack少了100块钱,rose多了一百块钱
    25             
    26             String sql="UPDATE bank SET bmoney=bmoney-100 WHERE bname='jack'";
    27             ps=(PreparedStatement) connection.prepareStatement(sql);
    28             
    29             //执行减100的操作
    30             int result=ps.executeUpdate();
    31             
    32             //执行加100的操作
    33             String sql2="UPDATE bank SET bmoney=bmoney+100 WHERE bname='rose'";
    34             int result2=ps.executeUpdate(sql2);
    35             
    36             connection.commit();//提交当前事务
    37             
    38             System.out.println(result+" : "+ result2);
    39             
    40         } catch (Exception e) {
    41             // TODO Auto-generated catch block
    42             e.printStackTrace();
    43         }
    44 
    45     }

     结果:

  • 相关阅读:
    截图片
    C#根据字节数截取字符串
    学习ObjectiveC: 入门教程
    [原]32位libusb
    [转]vim下鼠标右键无法复制的解决
    [原]c语言问号表达式
    [转]Linux下的帧缓冲lcd应用编程及Framebuffer驱动程序模型
    [转] android移植详解
    [转]Linux 串口编程
    curl 使用代理
  • 原文地址:https://www.cnblogs.com/dabu/p/12968480.html
Copyright © 2020-2023  润新知