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事务的更多相关文章

  1. Spring基于AOP的事务管理

                                  Spring基于AOP的事务管理 事务 事务是一系列动作,这一系列动作综合在一起组成一个完整的工作单元,如果有任何一个动作执行失败,那么事务 ...

  2. SQLServer事务同步下如何收缩日志

    事务同步是SQLServer做读写分离的一种常用的方式. 随着业务数据的不断增长,数据库积攒了大量的日志,为了腾出硬盘空间,需要对数据库日志进行清理 订阅数据库的日志清理 因为订阅数据库所有的数据都来 ...

  3. 事务日志已满,原因为“ACTIVE_TRANSACTION”

    汇总篇:http://www.cnblogs.com/dunitian/p/4822808.html#tsql 异常处理汇总-数据库系列  http://www.cnblogs.com/dunitia ...

  4. Mysql事务探索及其在Django中的实践(二)

    继上一篇<Mysql事务探索及其在Django中的实践(一)>交代完问题的背景和Mysql事务基础后,这一篇主要想介绍一下事务在Django中的使用以及实际应用给我们带来的效率提升. 首先 ...

  5. Mysql事务探索及其在Django中的实践(一)

    前言 很早就有想开始写博客的想法,一方面是对自己近期所学知识的一些总结.沉淀,方便以后对过去的知识进行梳理.追溯,一方面也希望能通过博客来认识更多相同技术圈的朋友.所幸近期通过了博客园的申请,那么今天 ...

  6. CRL快速开发框架系列教程七(使用事务)

    本系列目录 CRL快速开发框架系列教程一(Code First数据表不需再关心) CRL快速开发框架系列教程二(基于Lambda表达式查询) CRL快速开发框架系列教程三(更新数据) CRL快速开发框 ...

  7. 玩转spring boot——结合JPA事务

    接着上篇 一.准备工作 修改pom.xml文件 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi=&q ...

  8. MySQL 系列(三)你不知道的 视图、触发器、存储过程、函数、事务、索引、语句

    第一篇:MySQL 系列(一) 生产标准线上环境安装配置案例及棘手问题解决 第二篇:MySQL 系列(二) 你不知道的数据库操作 第三篇:MySQL 系列(三)你不知道的 视图.触发器.存储过程.函数 ...

  9. PHP中PDO事务的使用方法

    事务 (Transaction) 是操作数据库中很重要的一个功能, 它可以让你预定一条, 或者一系列 SQL 语句, 然后一起执行. 在执行的过程中, 如果其中的某条执行失败, 可以回滚所有已更改的操 ...

随机推荐

  1. redis slowlog 慢查询日志

    设置 config set slowlog-log-slower-than 10000(微秒) //查看redis时间超过上面设置的阀值的key slowlog len 有几个key slowlog ...

  2. DatePicker日期选择器的使用

    效果展示: 代码如下: <el-date-picker v-model="listQuery.times" type="daterange" range- ...

  3. JavaWeb实现用户登录注册功能实例代码(基于Servlet+JSP+JavaBean模式)

    一.Servlet+JSP+JavaBean开发模式(MVC)介绍 Servlet+JSP+JavaBean模式(MVC)适合开发复杂的web应用,在这种模式下,servlet负责处理用户请求,jsp ...

  4. CentOS Install NMP

    目录 Installation steps of the Nginx install run 默认安装路径 指定安装目录 Installation steps of the MySQL 下载源码包 解 ...

  5. Python3.x 基础练习题100例(61-70)

    练习61: 题目: 打印出杨辉三角形. 程序: if __name__ == '__main__': a = [] for i in range(10): a.append([]) for j in ...

  6. PUToast - 使用PopupWindow在Presentation上模拟Toast

    PUToast Android10 (API 29) 之前 Toast 组件默认只能展示在主 Display 上,PUToast 通过构造一个 PopupWindoww 在 Presentation ...

  7. 网络好不好,ping一下就知道

    摘要:在测试和部署网络通信应用时,我们经常会遇到网络不通的问题,一般都会想到ping一下.本文将带您了解ping命令的作用和原理~ 在测试和部署网络通信应用时,我们经常会遇到网络不通的问题.一般都会想 ...

  8. #String类简述(小白理解,小白编写,欢迎大神指点,小白跪谢)

    @ 目录 一.前言(可忽略) 二.String变量的认知 三.String类的构造方法 四.String类的基本方法 4.1 toString()方法 4.2 equals()方法 4.3 equal ...

  9. C# 应用 - 多线程 5) 死锁

    两个线程中的每一个线程都尝试锁定另外一个线程已锁定的资源时,就会发生死锁. 两个线程都不能继续执行. 托管线程处理类的许多方法都提供了超时设定,有助于检测死锁. 例如,下面的代码尝试在 lockObj ...

  10. struts2.0中ognl栈的解析

    ongl详解: ValueStack是Struts2的一个接口,字面意义为值栈,OgnlValueStack是 ValueStack的实现类,客 户端发起一个请求,struts2架构会创建一个acti ...