• Java Web总结十四之一存储过程、事务


    一、存储过程

      1、用当地数据库语言,写的一段业务逻辑算法,并该算法存储在客户端。

      2、使用存储过程需要用于CallableStatement接口,调用代码:

        CallableStatementcStmt = conn.prepareCall("{call demoSp(?, ?)}");

      3、对于存储过程的输出参数,需要注册:cstmt.registerOutParameter(3,Types.INTEGER);

      4、取得返回值时,需要按照输出参数的位置来取。

      5、案例如下:

    1)MySql存储过程代码:

    drop procedure add_pro;
    delimiter //
    
    create procedure add_pro(a int,b int,out sum int)
    begin
    set sum = a + b;
    end;
    //
    
    
    delimiter ;

    2)调用存储过程代码:

    package com.gnnuit.web.demo;
    
    import java.sql.CallableStatement;
    import java.sql.Connection;
    import java.sql.ResultSet;
    import java.sql.Types;
    
    import com.gnnuit.web.util.JdbcUtill;
    
    public class Demo1 {
    
        public static void main(String[] args) {
            Connection conn = null;
            CallableStatement cstmt = null;
            ResultSet rs = null;
            try {
                conn = JdbcUtill.getMySqlConnection();
                cstmt = conn.prepareCall("{call add_pro(?,?,?)}");
                cstmt.setInt(1, 100);
                cstmt.setInt(2, 200);
                cstmt.registerOutParameter(3, Types.INTEGER);
                cstmt.execute();
                System.out.println(cstmt.getInt(3));
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                JdbcUtill.close(rs);
                JdbcUtill.close(cstmt);
                JdbcUtill.close(conn);
            }
        }
    
    }

    二、事务

      1、每种数据库都有事务的支持,但支持强度不同。

      2、以MySQL为例:

        启动事务:start transaction;

        提交事务:commit;

        回滚事务:rollback;

      3、在事务范围内回滚是允许的,但如果commit后再回滚,无效

      4、其实每条SQL都有事务存在,只是显示还隐藏而言,默认都是隐藏事务

      5、事务的操作,必须争对同一个Connection。

      6、事务的操作,可以设置一个回滚点,便于回滚到最近的回滚点处。

    三、事务的特性

      1、原子性(Atomicity)

        原子性是指事务是一个不可分割的工作单位,事务中的操作要么都发生,要么都不发生。

      2、一致性(Consistency)

        事务必须使数据库从一个一致性状态变换到另外一个一致性状态。

      3、隔离性(Isolation)

        事务的隔离性是多个用户并发访问数据库时,数据库为每一个用户开启的事务,不能被其他事务的操作数据所干扰,多个并发事务之间要相互隔离。

      4、持久性(Durability)

        持久性是指一个事务一旦被提交,它对数据库中数据的改变就是永久性的,接下来即使数据库发生故障也不应该对其有任何影响。

    四、违背隔离性的三个缺点

      1、脏读:一个线程看到了另一个线程未提交的数据,叫脏读。

      2、不可重复读:一个线程多次做查询操作,多次结果都不一致,叫不可重复读。

      3、幻读/虚读:是指在一个事务内读取到了别的事务插入的数据,导致前后读取不一致。

    五、事务的隔离级别

      1、Serializable:可避免脏读、不可重复读、虚读情况的发生。(串行化)

      2、Repeatable read:可避免脏读、不可重复读情况的发生。(可重复读)

      3、Read committed:可避免脏读情况发生(读已提交)。

      4、Read uncommitted:最低级别,以上情况均无法保证。(读未提交)

      总结:项目中,对于select操作不需要事务,对于其它操作(update/delete/insert)操作需要事务。

  • 相关阅读:
    Cmd Markdown 公式指导手册
    ubuntu 21.10 上的一些必备库的安装 opengl, opencv
    MarkDown 数学公式
    免费代理IP地址列表
    pyexecl的使用
    磁盘IO满负荷性能分析
    DRM 简介
    Oracle修改字符集ORA02374,ORA12899,ORA02372
    oracle grid修改ip
    Oracle性能问题一般排查方法
  • 原文地址:https://www.cnblogs.com/FlySheep/p/3672750.html
Copyright © 2020-2023  润新知