Java模拟事务Demo

Java操作Oracle事务,以转账为例。
转账之前
在这里插入图片描述

package translate.commit;import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;public class CommitRollback {public static void main(String[] args) {giao();}public static void giao() {Connection conn = null;PreparedStatement ps = null;PreparedStatement ps1 = null;try {conn = getConn();// jack 给 rose 转200 快String sql = "update stu set s_money = s_money - 200 where s_id = ?";// 预编译SQL语句。ps = conn.prepareStatement(sql);ps.setInt(1, 1);// 不让Java自动提交事务conn.setAutoCommit(false);int i = ps.executeUpdate();System.out.println(i>0 ? "转账成功" : "失败");// 模拟异常。System.out.println(1/0);sql = "update stu set s_money = s_money + 200 where s_id = ?";ps1 = conn.prepareStatement(sql);ps1.setInt(1, 2);conn.setAutoCommit(false);int i1 = ps1.executeUpdate();System.out.println(i1>0 ? "到账成功" : "失败");// 手动提交事务 如果没有异常,则可提交。conn.commit();} catch (Exception e) {try {// 程序由于算术错误 中断 所以要撤回提交。conn.rollback();} catch (SQLException e1) {e1.printStackTrace();}e.printStackTrace();} finally {closeAll(conn, ps, null);try {if (ps1 != null)ps1.close();} catch (SQLException e) {e.printStackTrace();}}}public static Connection getConn() throws Exception {Class.forName("oracle.jdbc.OracleDriver");String url = "jdbc:oracle:thin:@127.0.0.1:1521:orcl";Connection conn = DriverManager.getConnection(url, "scott", "scott");return conn;}public static void closeAll(Connection conn, PreparedStatement ps, ResultSet rs) {	try {if (rs != null)rs.close();if (ps != null)ps.close();if (conn != null)conn.close();} catch (SQLException e) {e.printStackTrace();}}}

执行之后
在这里插入图片描述
SQL里面的事务介绍如下:
SQL事务

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/421120.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

设计模式4-创建型模式-Prototype模式

意图:用原型实例指定创建对象的种类,并且通过拷贝这些原型对象创建新的对象。 原型模式的结构比较简单,在使用C实现该模式时重点要注意deep copy和shallow copy的问题。prototype模式在实际使用的过程中,可以通过增加一个原型管理…

Android--通知之Notification

前言 之前一篇博客讲了Android下使用Toast的方式提示消息。这篇博客讲解一下在Android中使用Notification提示消息给用户,Notification是一种具有全局效果的通知,程序一般通过NotificationManager服务来发送Notification。在本篇博客中,将介绍…

UDP协议下的DatagramSocket和DatagramPacket

1,UDP协议? 面向无连接,数据不安全,但速度快。不区分客户端与服务端。 2,实现通信? (三个达到) IP 简单说就是你电脑地址。端口 你电脑里面软件的地址。协议 如何进行通讯。 DatagramSocket 用来发送和接收数据报包的…

使用Log4J监控系统日志邮件警报

使用Log4J监控系统日志邮件警报 前言 在系统上线后,有时候遇到系统故障,这时候就可以登录服务器查看系统日志来排查问题。但是需要登录服务器,下载查找相关异常日志比较麻烦。而且没有监控的话,也无法实时了解到系统是否正常运行。…

TCP协议下 Socket 与 ServerSocket

不多bb. package c_20_1_5;import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.InetAddress; import java.net.ServerSocket; import java.net.Socke…

Autodesk的照片建模云服务—Autodesk ReCap 360 photo

现实捕捉技术方兴未艾,简单的讲现实捕捉技术就是把现实中的现状信息数字化到计算机中以便做进一步的处理。对于不同的应用目的会有不同的捕捉设备,工程或传媒娱乐行业中经常用到的肯定就是三维模型了。那如何得到三维模型呢?我们有多种途径和…

Java多线程,锁(synchronize),饿汉式单例线程,等待处理机制

一,礼让和守护线程 package com.much.hard;public class TestYieldProtect {public static void main(String[] args) {Yield1 y1 new Yield1();y1.setName("A");Yield2 y2 new Yield2();y2.setName("B");//y1.start();//y2.start();Daemon1…

升级ADT22.6后,Android模拟器无法创建

这 两天,在社区里看到有小伙伴们反应,自己在Eclipse下无法创建Android模拟器的问题。起初,自己也没太在意,我一直使用的是 Genymotion模拟器。然后,问题不解决,总有那么一天会让自己碰到的。这不&#xff0…

原来js的parseInt函数还可以这样用

QQpc端登录账号还可以这样玩!!! 图片上来。 wow,我惊呆了。 居然可以登录进出?! 都知道,登录会验证账号是整数,文本框输入的是字符串,会把字符串转成整数, 而…

实验1 熟悉实验环境

本操作系统实验的硬件环境是IA-32(x86)架构的PC机(就是你现在正在使用的计算机),主要软件环境是Bochs gcc 你最喜欢的编辑器/IDE 你最喜欢的操作系统 Linux 0.11源代码。实验的基本流程是根据实验要求编写应用程序、修改Linux 0.11的源代…

前端学习(1032):jquery插件-瀑布流

1网址打开 下载插件 2引入css和js和html 3修改图片

实验2 操作系统的引导

操作系统的引导 实验目的 熟悉hit-oslab实验环境;建立对操作系统引导过程的深入认识;掌握操作系统的基本开发过程;能对操作系统代码进行简单的控制,揭开操作系统的神秘面纱。 实验内容 此次实验的基本内容是: 阅读《…

从Tom说JSP原理

第一次执行: 客户端通过电脑连接服务器,因为是请求是动态的,所以所有的请求交给WEB容器来处理在容器中找到需要执行的*.jsp文件之后*.jsp文件通过转换变为*.java文件.java文件经过编译后,形成.class文件最终服务器要执行形成的*.…

前端学习(1033):jquery插件-图片懒加载

1下载插件 2html css和js引入 ctrlh 快速替换 必须最后插入

对自己有用的VS调试技巧

设置下一条语句编辑然后继续符号越界后查看堆对象查看数组的值底部设置下一条语句 返回顶部 一个典型的调试情况就是通过单步跟踪分析为什么一个函数调用失败了。当你发现一个函数调用的另一个函数返回错误的时候你会怎么做?重启调试?有更好的方法。拖动…

前端学习(1034):jquery插件-全屏滚动

fullpage.js 1下载插件 js css html 4引入

实验4 [bx]和loop的使用

(1) assume cs:codesgcodesg segmentmov ax, 0mov ds, axmov bx, 200H ;ds:bx数据区mov cx, 40hmov dl, 0 s: mov ds:[bx], dl ;dl中间变量inc bxinc dlloop smov ax, 4c00h int 21hcodesg ends end实验结果: (2) 考虑(1&#…