JDBC事务
2018-06-17 23:59:09来源:未知 阅读 ()
事务概述
事务指的是逻辑上的一组操作(多条sql语句),组成这组操作的各个单元要么全都成功,要么全都失败.
事务的作用
保证在一个事务中多次操作要么全都成功,要么全都失败.
mysql事务操作
Connection接口中有和事务有关的方法:
void setAutoCommit(boolean autoCommit) 将此连接的自动提交模式设置为给定状态。
autoCommit - 为 true 表示启用自动提交模式;为 false 表示禁用自动提交模式
要把autoCommit设置为false,让事务手动开启
void commit() 如果多条sql都执行成功,提交事务
void rollback() 有一条sql执行失败,就回滚事务,把数据回滚到开启事务之前的状态
代码实现
1 public class Demo01Account { 2 public static void main(String[] args) { 3 Connection conn = null; 4 Statement stat = null; 5 try { 6 //注册驱动 7 Class.forName("com.mysql.jdbc.Driver"); 8 //获取连接 9 conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/day06", "root", "root"); 10 //开启事物 11 conn.setAutoCommit(false); 12 //获取执行者对象 13 stat = conn.createStatement(); 14 int i = stat.executeUpdate("update account set money=money-100 where name='tom'"); 15 int num = 0/0;//tom钱减少了,jerry钱没有增加 16 int j = stat.executeUpdate("update account set money=money+100 where name='jerry'"); 17 if(i>0 && j>0){ 18 System.out.println("转账成功!"); 19 } 20 //提交事物 21 conn.commit(); 22 } catch (Exception e) { 23 e.printStackTrace(); 24 //回滚事物 25 try { 26 conn.rollback(); 27 } catch (SQLException e1) { 28 e1.printStackTrace(); 29 } 30 }finally{ 31 if (stat != null){ 32 try { 33 stat.close(); 34 } catch (Exception e) { 35 e.printStackTrace(); 36 } 37 } 38 if (conn != null){ 39 try { 40 conn.close(); 41 } catch (Exception e) { 42 e.printStackTrace(); 43 } 44 } 45 } 46 47 } 48 }
事务的特性
原子性:强调事务的不可分割.多条语句要么都成功,要么都失败。
一致性:强调的是事务的执行的前后,数据要保持一致.
隔离性:一个事务的执行不应该受到其他事务的干扰.
持久性:事务一旦结束(提交/回滚)数据就持久保持到了数据库.
如果不考虑事务的隔离性,引发一些安全性问题
脏读:一个事务读到另一个事务还没有提交的数据.
脏读又称无效数据的读出,是指在数据库访问中,事务T1将某一值修改,然后事务T2读取该值,此后T1因为某种原因撤销对该值的修改,这就导致了T2所读取到的数据是无效的
不可重复读:一个事务读到了另一个事务已经提交的update的数据,导致在当前的事务中多次查询结果不一致.
虚读/幻读 :一个事务读到另一个事务已经提交的insert的数据,导致在当前的事务中多次的查询结果不一致.
解决引发的读问题
设置事务的隔离级别:级别超高,越安全,效率越低。
1 read uncommitted :未提交读.脏读,不可重复读,虚读都可能发生.
2 read committed :已提交读.避免脏读.但是不可重复读和虚读有可能发生.(Oracle默认)
4 repeatable read :可重复读.避免脏读,不可重复读.但是虚读有可能发生.(MySql默认)
8 serializable :串行化的.避免脏读,不可重复读,虚读的发生.
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
上一篇:mysql续
- 深入学习MySQL事务:ACID特性的实现原理 2019-08-23
- 深入理解PHP+Mysql分布式事务与解决方案 2019-08-13
- mysql事务处理用法与实例详解 2019-08-09
- php多进程模拟并发事务产生的问题,可学习参考 2019-08-09
- Eclipse使用jdbc连接MySql数据库报:java.sql.SQLException: 2019-07-24
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash