iis服务器助手广告广告
返回顶部
首页 > 资讯 > 数据库 >【JDBC】笔记(4)-
  • 815
分享到

【JDBC】笔记(4)-

【JDBC】笔记(4)- 2021-09-15 13:09:02 815人浏览 猪猪侠
摘要

但是在实际的业务中,通常是多条 DML语句 联合完成的,那么就必须保证这些 DML语句 在同一个事务中同时成功或失败...... 楔子:    JDBC 的事务默认是自动提交的:    只要执

【JDBC】笔记(4)-

但是在实际的业务中,通常是多条 DML语句 联合完成的,那么就必须保证这些 DML语句 在同一个事务中同时成功或失败......

楔子:

   JDBC 的事务默认是自动提交的:

   只要执行一条 DML语句,则自动提交一次。但是在实际的业务中,通常是多条 DML语句 联合完成的,那么就必须保证这些 DML语句 在同一个事务中同时成功或失败!!!

   否则这会是一个非常严重的bug!!!


 

import java.sql.*;



public class JDBCTransactionTest01 {
    public static void main(String[] args) {
        Connection connection = null;
        PreparedStatement ps = null;
        int count = 0;
        try {
            Class.forName("com.Mysql.cj.jdbc.Driver");

            connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/bjpowernode"
                    , "root", "888");

            String sql = "update t_act set balance = ? where actno = ?";
            ps = connection.prepareStatement(sql);
            ps.setDouble(1, 0);
            ps.setDouble(2, 5566);

            count = ps.executeUpdate();

            String s = null;
            s.toString();

            String sql0 = "update t_act set balance = ? where actno = ?";
            ps = connection.prepareStatement(sql0);
            ps.setDouble(1, 1000);
            ps.setDouble(2, 1314);

            count += ps.executeUpdate();
            System.out.println("更新数据:" + count + "条");

        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if (ps != null) {
                try {
                    ps.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
            if (connection != null) {
                try {
                    connection.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
            System.out.println(count == 2?"转账成功":"转账失败");
        }
    }
}

 

idea控制台输出结果:

java.lang.NullPointerException
	at com.bjpowernode.jdbc.JDBCTransactionTest01.main(JDBCTransactionTest01.java:48)
转账失败

Process finished with exit code 0

 

现在瞅一眼 t_act:

  +-------+---------+
  | actno | balance |
  +-------+---------+
  |  5566 |    0.00 |
  |  1314 |    0.00 |
  +-------+---------+

哎呀我去,这bug太严重了,钱都飞了!!


 

import java.sql.*;

public class JDBCTransactionTest02 {
    public static void main(String[] args) {
        Connection connection = null;
        PreparedStatement ps = null;
        int count = 0;

        try {
            Class.forName("com.mysql.cj.jdbc.Driver");

            connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/bjpowernode"
                    , "root", "888");

            //将自动提交机制修改为手动提交
            connection.setAutoCommit(false);

            String sql = "update t_act set balance = ? where actno = ?";
            ps = connection.prepareStatement(sql);
            ps.setDouble(1, 0);
            ps.setDouble(2, 5566);

            count = ps.executeUpdate();

            String s = null;
            s.toString();

            String sql0 = "update t_act set balance = ? where actno = ?";
            ps = connection.prepareStatement(sql0);
            ps.setDouble(1, 1000);
            ps.setDouble(2, 1314);

            count += ps.executeUpdate();
            System.out.println("更新数据:" + count + "条");

            //程序执行到这说明没有异常,事务结束,手动提交数据
            connection.commit();
        } catch (Exception e) {
            //如果出现异常,回滚事务
            if (connection != null) {
                try {
                    connection.rollback();
                } catch (SQLException ex) {
                    ex.printStackTrace();
                }
            }
            e.printStackTrace();
        } finally {
            if (ps != null) {
                try {
                    ps.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
            if (connection != null) {
                try {
                    connection.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
            System.out.println(count == 2?"转账成功":"转账失败");
        }
    }
}

 

IDEA控制台输出结果:

java.lang.NullPointerException
	at com.bjpowernode.jdbc.JDBCTransactionTest02.main(JDBCTransactionTest02.java:31)
转账失败

Process finished with exit code 0

 

现在瞅一眼 t_act:

  +-------+---------+
  | actno | balance |
  +-------+---------+
  |  5566 | 1000.00 |
  |  1314 |    0.00 |
  +-------+---------+

虽然因为某些原因导致转账失败,但是数据库中储存的数据一切正常,而且控制台也给出了提示(转账失败),所以总结:此转账程序非常成功!


 

您可能感兴趣的文档:

--结束END--

本文标题: 【JDBC】笔记(4)-

本文链接: https://www.lsjlt.com/news/9036.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Python爬虫笔记4-Beautif
    BeautifulSoup介绍 与lxml一样,BeautifulSoup也是一个HTML/XML的解析器,主要功能也是如何解析和提取HTML/XML数据。 几种解析工具的对比 工具 速度 难度 正则表达式 最快 困难 ...
    99+
    2023-01-31
    爬虫 笔记 Python
  • Python学习笔记4——函数
    函数 1 # 函数需要先定义,关键字 def 2 def func(): 3 print("我是一个函数") 4 5 # 函数的调用 6 func() 执行结果: 我是一个函数 内建函数(内置函数) help(), prin...
    99+
    2023-01-30
    函数 学习笔记 Python
  • Python 学习笔记 (4)—— 模块
           模块基本上就是一个包含了所有你定义的函数和变量的文件。为了在其他程序中重用模块,模块的文件名必须以.py为扩展名。        模块可以从其他程序 输入 以便利用它的功能。这也是我们使用Python标准库的方法。首先,我们...
    99+
    2023-01-31
    学习笔记 模块 Python
  • python运维开发笔记4
    1.函数如何被调用,通过return返回值来调用2.生成器和return区别yield 生成器返回对象,可以迭代可以执行glob模块 类似shell中的正则匹配shlex模块  Popen 将命令参数直接分词cmd = "ps ax -o ...
    99+
    2023-01-31
    笔记 python
  • Python入门学习笔记4:他人的博客及
    看其他人的学习笔记,可以保证自己不走弯路。并且一举两得,即学知识又学方法! 廖雪峰:https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e5...
    99+
    2023-01-30
    学习笔记 入门 博客
  • VLAN笔记
    虚拟VLAN 什么是VLANVLAN的作用VLAN的优缺点VLAN的配置方法VLAN有哪些接口模式access与trunk接口的区别Hybrid接口拓扑实验 ensp Cisco H3C​ 什么是VLAN VLAN(V...
    99+
    2023-09-26
    tcp/ip
  • SpringCloud笔记
    2023年最新笔记,全文约 3 万字,蕴含 Spring Cloud 常用组件 Nacos、OpenFeign、Seata、Sentinel 等 〇、简介 什么是Spring Cloud? ​ Spring Cloud是一系列框架...
    99+
    2023-08-23
    spring spring cloud java
  • nginx笔记
    Nginx 是一款轻量级的 Web 服务器、反向代理服务器,它内存占用少、启动速度快、并发能力强,在互联网项目中有广泛应用。 文章目录 一、简介二、常用配置1、listen2、serv...
    99+
    2023-09-05
    nginx 服务器 运维
  • Linux笔记
    一。基础思想 一切皆文件。 两条权限原则: 权限分组原则权限最小原则 su是切换用户,而sudo则是用root权限执行某操作( 普通用户+sudo=安全) Linux目录 系统只存在一颗文件树、从==/==开始,所有的文件都...
    99+
    2023-08-20
    linux 服务器 运维
  • python3 笔记
    .1# 数的定义:# 格式化: format ---字符串拼接 %d,%f,%s 格式化输出 str()、int()、float()强转类型函数 #age=int(input('请输入您的年龄:'))#print ( age-1) ...
    99+
    2023-01-31
    笔记
  • Python笔记
    列表[List] 元组(truple) 字典{dict} # 列表中的每个元素都分配一个数字 - 它的位置,或索引,第一个索引是0,第二个索引是1,依此类推 # list comprehension [i for i in range...
    99+
    2023-01-31
    笔记 Python
  • SQLite3 笔记
    SQLite insert 插入一行: 插入一组: 使用select结果插入 多行插入到新表: 多行插入到新表,一步到位: 非常有用的临时表: sqlite update 更新一条记录: update 注意 约束 sqlite ...
    99+
    2023-01-31
    笔记
  • Zookeeper笔记
    为什么要使用Zookeeper dubbo需要一个注册中心,而Zookeeper是我们在使用Dubbo是官方推荐的注册中心 Zookeeper介绍 Zookeeper的集群机制 Zookeepe...
    99+
    2023-09-08
    zookeeper java
  • django笔记
    装饰器:require_http_method() 当然你可以在视图函数内丢弃那些期望之外的请求(比如上例中的POST /report/1234/), 但更简单的做法是使用Django预置的require_http_methods(met...
    99+
    2023-01-30
    笔记 django
  • Java2HTML改造手记(4) (转)
    Java2HTML改造手记(4) (转)[@more@]Java2HTML改造手记(4)XML:namespace prefix = o ns = "urn:schemas-microsoft-com:Office:office" />原来...
    99+
    2023-06-03
  • python笔记day3
    字典修改或者添加:dict['key'] = value程序二:file1.txt文件内容如下:alex|123|1carrick|123|1tony|123|1从文件file1.txt中读出内容,写成dic = {'carrick': [...
    99+
    2023-01-31
    笔记 python
  • php笔记1
    php环境 PHP作为一种服务器端脚本语言,可以在各种操作系统上运行。搭建PHP网站的环境,你需要以下几个要素: Web服务器:常见的选择有Apache、Nginx和IIS。你需要安装和配置其中一个服...
    99+
    2023-10-09
    php 笔记 开发语言
  • ctf笔记:php
    ctf笔记:php 博客链接:https://www.blog.23day.site/articles/80 语法 攻防世界:easy_php == 攻防世界:simple_php $a ...
    99+
    2023-08-31
    php 开发语言
  • 笔记本电脑连接不上wifi怎么办?看下面4种方法
    WIFI可以让我们的网络运行得更快,尤其是对于工作来说,它是不可或缺的。但是有时候,我们明明在笔记本电脑上看到WIFI,但就是连接不上,笔记本电脑连接不上wifi怎么办?方法主要有下面4个! 演示机型:联想GeekPro2020 ...
    99+
    2023-09-01
    网络 服务器 运维
  • [笔记]python template
    template是python中的string库的一部分 使用template可以不编辑应用就可以改变其中的数据 模板还可以被他的子类修改 template是含有占位符的字符串 用字典将值映射到模板中 占位符后面跟着的变量名要...
    99+
    2023-01-31
    笔记 python template
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作