java 存储过程 事务_Java Web总结十四之一存储过程、事务

一、存储过程

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

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

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

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

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

5、案例如下:

1)MySql存储过程代码:

drop procedure add_pro;

delimiter//create procedure add_pro(aint,b int,out sum int)

begin

set sum= a +b;

end;//delimiter ;

2)调用存储过程代码:

packagecom.gnnuit.web.demo;importjava.sql.CallableStatement;importjava.sql.Connection;importjava.sql.ResultSet;importjava.sql.Types;importcom.gnnuit.web.util.JdbcUtill;public classDemo1 {public static voidmain(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)操作需要事务。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值