- 浏览: 174811 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (321)
- eclipse (4)
- idea (2)
- Html (8)
- Css (14)
- Javascript (8)
- Jquery (6)
- Ajax Json (4)
- Bootstrap (0)
- EasyUI (0)
- Layui (0)
- 数据结构 (0)
- Java (46)
- DesPattern (24)
- Algorithm (2)
- Jdbc (8)
- Jsp servlet (13)
- Struts2 (17)
- Hibernate (11)
- Spring (5)
- S2SH (1)
- SpringMVC (4)
- SpringBoot (11)
- WebService CXF (4)
- Poi (2)
- JFreeChart (0)
- Shiro (6)
- Lucene (5)
- ElasticSearch (0)
- JMS ActiveMQ (3)
- HttpClient (5)
- Activiti (0)
- SpringCloud (11)
- Dubbo (6)
- Docker (0)
- MySQL (27)
- Oracle (18)
- Redis (5)
- Mybatis (11)
- SSM (1)
- CentOS (10)
- Ant (2)
- Maven (4)
- Log4j (7)
- XML (5)
最新评论
1. 事务的概念
2. MySQL对事务的支持
3. JDBC事务处理
4. 事务保存点
事务处理在数据库开发中有着非常重要的作用,所谓事务就是所有的操作要么一起成功,要么一起失败,事务本身具有原子性(Atomicity)、一致性(Consistency)、隔离性或独立性(Isolation)、持久性(Durability)4个特性,这4个特性也被称为ACID特征。 原子性:原子性是事务最小的单元,是不可再分隔的单元,相当于一个个小的数据库操作,这些操作必须同时成功,如果一个失败了,则一切的操作将全部失败。 一致性:指的是在数据库操作的前后是完全一致的,保证数据的有效性,如果事务正常操作则系统会维持有效性,如果事务出现了错误,则回到最原始状态,也要维持其有效性,这样保证事务开始时和结束时系统处于一致状态。 隔离性:多个事务可以同时进行且彼此之间无法访问,只有当事务完成最终操作时,才可以看到结果。 持久性:事务完成之后,它对于系统的影响是永久性的。该修改即使出现致命的系统故障也将一直保持。
2. MySQL对事务的支持
序号 命令 描述 1 SET AUTOCOMMIT=0 取消自动提交处理,开启事务处理 2 SET AUTOCOMMIT=1 打开自动提交处理,关闭事务处理 3 START TRANSACTION 启动事务 4 BEGIN 启动事务,相当于执行 START TRANSACTION 5 COMMIT 提交事务 6 ROLLBACK 回滚全部事务 7 SAVEPOINT 事务保存点名称 设置事务保存点 8 ROLLBACK TO SAVEPOINT 保存点名称 回滚操作到保存点
3. JDBC事务处理
4. 事务保存点
create table t_account ( id int(11) not null auto_increment, accountname varchar(20) default null, accountbalance int(11) default null, primary key (id) ) engine=innodb auto_increment=3 default charset=utf8; insert into t_account(id,accountName,accountBalance) values (1,'张三',500),(2,'李四',1000); Demo01.java package com.andrew.jdbc.chap09; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.SQLException; import com.andrew.jdbc.util.DbUtil; public class Demo01 { private static DbUtil dbUtil = new DbUtil(); // 转出 private static void outCount(Connection con, String accountName, int account) throws Exception { String sql = "update t_account set accountBalance=accountBalance-? where accountName=?"; PreparedStatement pstmt = con.prepareStatement(sql); pstmt.setInt(1, account); pstmt.setString(2, accountName); pstmt.executeUpdate(); } // 转入 private static void inCount(Connection con, String accountName, int account) throws Exception { String sql = "update t_account set accountBalance=accountBalance+? where accountName=?"; PreparedStatement pstmt = con.prepareStatement(sql); pstmt.setInt(1, account); pstmt.setString(2, accountName); pstmt.executeUpdate(); } public static void main(String[] args) { Connection connection = null; try { connection = dbUtil.getConnection(); connection.setAutoCommit(false); // 取消自动提交 System.out.println("张三开始向李四转账!"); int account = 500; outCount(connection, "张三", account); inCount(connection, "李四", account); System.out.println("转账成功!"); } catch (Exception e) { try { connection.rollback(); // 回滚 } catch (SQLException e1) { e1.printStackTrace(); } e.printStackTrace(); } finally { try { connection.commit(); // 提交事务 connection.close(); } catch (SQLException e) { e.printStackTrace(); } } } } 张三开始向李四转账! 转账成功! 500 1000 -> 0 1500 如果修改sql语句报错则不能执行
Demo02.java package com.andrew.jdbc.chap09; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.SQLException; import java.sql.Savepoint; import com.andrew.jdbc.util.DbUtil; public class Demo02 { private static DbUtil dbUtil = new DbUtil(); // 转出 private static void outCount(Connection con, String accountName, int account) throws Exception { String sql = "update t_account set accountBalance=accountBalance-? where accountName=?"; PreparedStatement pstmt = con.prepareStatement(sql); pstmt.setInt(1, account); pstmt.setString(2, accountName); pstmt.executeUpdate(); } // 转入 private static void inCount(Connection con, String accountName, int account) throws Exception { String sql = "update t_account set account=accountBalance+? where accountName=?"; PreparedStatement pstmt = con.prepareStatement(sql); pstmt.setInt(1, account); pstmt.setString(2, accountName); pstmt.executeUpdate(); } public static void main(String[] args) { Connection connection = null; Savepoint savepoint = null; try { connection = dbUtil.getConnection(); connection.setAutoCommit(false); // 取消自动提交 System.out.println("张三开始向李四转账!"); int account = 500; outCount(connection, "张三", account); savepoint = connection.setSavepoint(); // 设置一个保存点 inCount(connection, "李四", account); System.out.println("转账成功!"); } catch (Exception e) { try { connection.rollback(savepoint); // 回滚到savepoint保存点 } catch (SQLException e1) { e1.printStackTrace(); } e.printStackTrace(); } finally { try { connection.commit(); // 提交事务 connection.close(); } catch (SQLException e) { e.printStackTrace(); } } } } 运行结果: 张三开始向李四转账! com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column 'account' in 'field list' 500 1000 -> 0 1000
发表评论
-
使用元数据分析数据库
2019-04-18 00:13 3981. 使用DatabaseMetaData获取数据库基本信息 ... -
使用CallableStatement接口调用存储过程
2019-04-18 00:13 8701. CallableStatement接口的引入 Ca ... -
处理大数据对象
2019-04-17 09:18 3651. 处理大数据对象 大数据对象处理主要有CLOB(ch ... -
ResultSet结果集
2019-04-17 09:17 6001. ResultSet结果集的引入 当我们查询数据库时 ... -
使用PreparedStatement接口实现增,删,改操作
2019-04-17 09:17 5541. PreparedStatement接口引入 Pre ... -
使用Statement接口实现增,删,改操作
2019-04-17 09:17 6301. Statement接口引入 作用:用于执行静态SQ ... -
JDBC概述与连接
2019-04-17 09:17 3751. JDBC概述 1.1) JDBC简介 ...
相关推荐
1、JavaBean中使用JDBC事务处理 在JDBC中怎样将多个SQL语句组合成一个事务呢?在JDBC中,打开一个连接对象Connection时,缺省是auto-commit模式,每个SQL语句都被当作一个事务,即每次执行一个语句,都会自动的得到...
JDBC事务处理、提交、回滚。
JavaBean中使用JDBC方式进行事务处理方案 有详细的事物处理代码
Sharding-JDBC分布式事务应用
Java(JDBC)事务处理
通过转账案例讲解了三层和事务,以及容易出现问题的关键点
Java-JDBC【之】事务介绍、事务特性、操作事务(事务提交、异常回滚) 1.数据库事务 1.1.介绍 1.2.事务特性(ACID) ...1.4.JDBC事务处理 2.事务提交(代码实现) 3.异常回滚(代码实现) 4.完整源码
利用对JDBC事务进行修改管理
jdbc连接各数据库及事务处理
封装了java使用jdbc对mysql的操作,以及java使用jdbc对mysql的事务处理,对execute、executeUpdate、executeQuery进行了封装,把繁琐的创建数据库连接对象、PreparedStatement对象、结果集对象,打开关闭连接进行了...
自己写的一个java示例 该示例用jdbc与java事务来实现DAO层的各个DAO的各方法之间的事务关联 使上层可以保证各数据访问的原子性 该示例包含了一个方便调用的数据库访问工具类,该工具类实现了调用SQL语句,调用...
(4)、懒事务处理方式,service层使用@Transactional注解的方法或者类只能走默认库(写库) (5)、AOP根据Dao层的方法名来判断读写库的切换,超出判断规则的只能走默认库(写库) 2、sharding-jdbc (1)、实现...
JDBC事务处理的作用对象为Connection, 因此要想控制操作在同一个事务里面, 我们必须要传递Connection, 确保使用的是同一个Connection.
在事务性语句执行过程中,服务器将会进行额外的处理,在服务器执行时多个事务是并行执行的,为了把他们的记录在一起,需要引入事务缓存的概念。在事务完成被提交的时候一同刷新到二进制日志。对于非事务性语句的处理...
JDBC使用MySQL处理大数据+事务控制管理.txt
NULL 博文链接:https://liaoliu51.iteye.com/blog/603826
事务是为解决数据安全操作提出的,事务控制实际上就是...使用 JDBC 事务界定时,您可以将多个 SQL 语句结合到一个事务中。JDBC 事务的一个缺点是事务的范围局限于一个数据库连接。一个 JDBC 事务不能跨越多个数据库。
1、什么是JDBC; 2、理解JDBC原理、知道什么是JDBC驱动;3、知道JDBC的功能;4、掌握JDBC中几个重要类的使用:Connection、Statement、...7、理解数据库事务、JDBC对事务的支持、以及JDBC事务的原理和如何使用JDBC事务。
(4)理解JDBC中实现事务处理的基本方法; (5)理解数据库连接池的基本原理和思想,学会在tomcat服务器中配置数据库连接池,并掌握从连接池中获取连接的基本方法。 (6)初步理解数据访问层的基本设计方法,理解web...
主要介绍了Java事务管理学习之JDBC的相关资料,文中介绍的非常详细,相信对大家具有一定的参考价值,需要的朋友们下面来一起看看吧。