JDBC_12_JDBC事务
JDBC事务
JDBC中事务默认自动提交,每执行一次SQL就会自动提交一次。 这样的话可能出现数据安全性问题。
connection.setAutoCommit(false) false代表关闭自动提交事务 true代码自动提交事务
connection.commit(); 没有异常 手动提交事务
connection.rollback(); 存在异常 手动回滚事务
代码:
```
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
/**
* JDBC操作数据库,模拟银行转账
* connection.setAutoCommit(false) false代表关闭自动提交事务 true代码自动提交事务
* connection.commit(); 没有异常 手动提交事务
* connection.rollback(); 存在异常 手动回滚事务
*
*/
public class JDBCTest09 {
public static void main(String[] args) throws SQLException {
//创建数据库连接对象
Connection connection=null;
PreparedStatement preparedstatement=null;
int count=0;
try {
//注册驱动
Class.forName("com.mysql.cj.jdbc.Driver");
//获取连接
connection= DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/mydb?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai",
"root","123456");
//将JDBC的事务自动提交机制更改为手动提交
connection.setAutoCommit(false);
//获取预编译数据库对象,并编译SQL语句
String sql="UPDATE t_act SET BALANCE=? WHERE ACTNO=?";
preparedstatement=connection.prepareStatement(sql);
//给占位符传值
preparedstatement.setDouble(1,10000);
preparedstatement.setInt(2,111);
//执行sql语句
count=preparedstatement.executeUpdate();
//制造异常 程序中断执行. 执行后发现前面的SQL语句生效了,更改了账户中的余额,但是另一个账户的余额确没有增加,造成数据丢失。
//String str=null;
//str.toString();
//再次给占位符传值,给第二个账户赋值(转账)
preparedstatement.setDouble(1,10000);
preparedstatement.setInt(2,222);
//再次执行SQL
count+=preparedstatement.executeUpdate();
//输出 如果count==2,那么代表执行了两次sql
System.out.println(count==2?"转账成功":"转账失败");
//程序走到这里,说明以上程序没有异常,事务结束,手动提交事务
connection.commit();
} catch (ClassNotFoundException | SQLException e) {
// 如果程序执行到这里说明存在异常,那么数据就需要回滚,回滚事务,以保证数据的安全性。
if(connection!=null){
connection.rollback();
}
e.printStackTrace();
}finally {
// 释放资源
if(preparedstatement!=null){
try {
preparedstatement.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if(connection!=null){
try {
connection.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
}
JDBC_12_JDBC事务的更多相关文章
- Spring基于AOP的事务管理
Spring基于AOP的事务管理 事务 事务是一系列动作,这一系列动作综合在一起组成一个完整的工作单元,如果有任何一个动作执行失败,那么事务 ...
- SQLServer事务同步下如何收缩日志
事务同步是SQLServer做读写分离的一种常用的方式. 随着业务数据的不断增长,数据库积攒了大量的日志,为了腾出硬盘空间,需要对数据库日志进行清理 订阅数据库的日志清理 因为订阅数据库所有的数据都来 ...
- 事务日志已满,原因为“ACTIVE_TRANSACTION”
汇总篇:http://www.cnblogs.com/dunitian/p/4822808.html#tsql 异常处理汇总-数据库系列 http://www.cnblogs.com/dunitia ...
- Mysql事务探索及其在Django中的实践(二)
继上一篇<Mysql事务探索及其在Django中的实践(一)>交代完问题的背景和Mysql事务基础后,这一篇主要想介绍一下事务在Django中的使用以及实际应用给我们带来的效率提升. 首先 ...
- Mysql事务探索及其在Django中的实践(一)
前言 很早就有想开始写博客的想法,一方面是对自己近期所学知识的一些总结.沉淀,方便以后对过去的知识进行梳理.追溯,一方面也希望能通过博客来认识更多相同技术圈的朋友.所幸近期通过了博客园的申请,那么今天 ...
- CRL快速开发框架系列教程七(使用事务)
本系列目录 CRL快速开发框架系列教程一(Code First数据表不需再关心) CRL快速开发框架系列教程二(基于Lambda表达式查询) CRL快速开发框架系列教程三(更新数据) CRL快速开发框 ...
- 玩转spring boot——结合JPA事务
接着上篇 一.准备工作 修改pom.xml文件 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi=&q ...
- MySQL 系列(三)你不知道的 视图、触发器、存储过程、函数、事务、索引、语句
第一篇:MySQL 系列(一) 生产标准线上环境安装配置案例及棘手问题解决 第二篇:MySQL 系列(二) 你不知道的数据库操作 第三篇:MySQL 系列(三)你不知道的 视图.触发器.存储过程.函数 ...
- PHP中PDO事务的使用方法
事务 (Transaction) 是操作数据库中很重要的一个功能, 它可以让你预定一条, 或者一系列 SQL 语句, 然后一起执行. 在执行的过程中, 如果其中的某条执行失败, 可以回滚所有已更改的操 ...
随机推荐
- idea加载maven项目遇见的坑---2
idea每次加载完一个maven项目,都需要重新配置 file>>>Settings 然后继续找 还有就是配置项目的时候 配置项目jdk 最后需要注意,有时候你会发现都设置完了,但是 ...
- Guava-RateLimiter实现令牌桶控制接口限流方案
一.前言 对于一个应用系统来说,我们有时会遇到极限并发的情况,即有一个TPS/QPS阀值,如果超了阀值可能会导致服务器崩溃宕机,因此我们最好进行过载保护,防止大量请求涌入击垮系统.对服务接口进行限流可 ...
- Autocad中使用命令来调用python对Autocad二次开发打包后的exe程序
在Autocad中直接调用Python二次开发程序是有必要的,下面介绍一种方法来实现这个功能: 其基本思路是:先将二次开发的程序打包为可执行程序exe,然后编写lsp文件,该文件写入调用exe程序的语 ...
- nacos--配置中心之客户端
nacos提供com.alibaba.nacos.api.config.ConfigService作为客户端的API用于发布,订阅,获取配置信息: ConfigService获取配置信息流程: 优先使 ...
- Kubernetes-2.组件
内容主要摘自官网文档资料 官网地址 本文概述了交付正常运行的Kubernetes集群所需的各种组件. 本文编写基于kubernetes v1.17版本 目录 Kubernetes集群 Master组件 ...
- 微信小程序封装请求接口
var rootDocment = 'https://123.com';//你的域名 function postData(url, data, cb) { wx.request({ url: root ...
- 强化学习导论 课后习题参考 - Chapter 1,2
Reinforcement Learning: An Introduction (second edition) - Chapter 1,2 Chapter 1 1.1 Self-Play Suppo ...
- java知识汇总
文章目录 Java基础知识 基本类型 类别及其对应包装类 1. byte---Byte 2. char---Character 3. short---Short 4. int---Integer 5. ...
- MySQL入门(2)——存储引擎
MySQL入门(2)--存储引擎 查询MySQL支持的存储引擎 查询全部支持的引擎: show engines; ";"可以使用"\g"等价替换,而使用&quo ...
- golang 微服务以及相关web框架
golang 中国gocn golang Applicable to all database connection pools xorm是一个简单而强大的Go语言ORM库,通过它可以使数据库操作非常 ...