银行交易如何实现类似事务回滚

在做的项目中,有一个基金产品的购买交易,里面的大致逻辑是 先判断用户是否基金开户,未开户发交易开基金账户>是否签约***(具体什么省略) 未签约发交易签约>最后一步发交易购买该款基金产品。 但现在的问题是购买失败则一个java类里的前两个交易都给做了现在,想不出什么类似操作数据库的事务回滚机制才控制这段交易,该交易在一个页面完成。望经验丰富的朋友给个思路,谢谢!

3个回答

你可以使用应用层的事务框架,或者自己实现一个简单的:先将操作放入临时的表中,然后一次性操作。

事务实例
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;

public class RunInsert {

/**
 * @param args
 */
public static void main(String[] args) {
   Connection conn = null;
   Statement stmt = null;
   try {
       // 动态导入数据库的驱动
       Class.forName("com.mysql.jdbc.Driver");

       // 获取数据库链接
       conn = DriverManager.getConnection(
              "jdbc:mysql://localhost:3306/jdbc_teaching", "root", "");

       // 开启事务
       conn.setAutoCommit( false );

       // 创造SQL语句
       String sql = "INSERT INTO user_list ( user_name, user_password ) VALUES ( 'Eric', '123' )";

       // 执行SQL语句
       stmt = conn.createStatement();
       stmt.executeUpdate(sql);

       // 提交事务
       conn.commit();

       System.out.println( "OK!" );
   } catch (Exception e) {
       e.printStackTrace();
       // 回滚事务
       try {
          conn.rollback();
       } catch ( Exception e2 ) {}
   } finally {
       // 关闭Statement
       try {
          stmt.close();
       } catch (Exception e) {}
       // 关闭Connection
       try {
          conn.close();
       } catch (Exception e) {}
   }
}

}

事务回滚,看一下就知道了,黑马有一个课程就是说回滚事件,有空去看看!

这位兄弟应该是做电商的开发员,如果是在逻辑控制上(不局限于数据库操作的话),事务控制需要有一个规则。
首先定义BankTansaction接口,如:
public interface BankTransaction {
public void openTransaction() throws Exception;//打开事务
public void commitTransaction() throws Exception;//提交事务
public void rollbackTransaction() throws Exception;//回滚事务
}
乍一看,貌似数据库管理方式,其实是针对你所有业务程序的,只有用户确认了,再确认了,才发起一致请求。当然和用户的确认过程不是一个界面交互能做完的,只能使用数据库中间表,或cookie,session。

另外你应该写2个队列,是你的程序与银行接口之间的,一个专门处理发送交易,一个专门处理银行回执交易。每个用户发起的电商交易以工单方式下行操作,一步一步来,数据库工单表创建的合理点就好。

希望这个回答能帮得上你的忙。

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
java学习7:银行存取款的例子,主要涉及对象同步问题,类似于数据库存取款,数据一致性问题
银行存取款的例子,主要涉及对象同步问题,类似于数据库存取款,数据一致性问题。 --存取款都是用线程来控制 注意:这里程序设计中没考虑账户金额不足的问题,这里只考虑了对操作对象的同步问题。       对共享对象操作的类、代码块 要加上 synchronized 关键字 代码如下: Bank类: package com.imooc.bank; public cl
银行交易系统实现1
银行交易系统实现1.有视频详细讲解过程.适合任何开发人员.因为上传上线限制,支援分为2个部分上传这个是第一部分
使用SQL SERVER存储过程实现银行转账业务
在银行金融系统中,我们常常都要实现银行转账这样的业务操作,而这种金融系统并发性相当高,需要考虑的如何提高性能和保证安全性等相关的问题。使用存储过程来实现银行转账是一个很好的选择。SQL SERVER数据库中的存储过程相对于应用程序中来操作Transact-SQL语言的优缺点:优点: 1.              存储过程已在服务器注册,预编译,存储过程预先编译好放在数据库内,减少编译
分布式服务下的交易一致性解决方案
分布式服务下的交易一致性解决方案n银行很强势,我们什么都不管(1. 调一次,我出款一次; 2. 不提交任何冥等操作)n我们什么都没有(没有分布式事务)n用户只提交一次n我们只能成功一次n一、远程调用与本地事务区分开(别人挂, 我们不挂)事务方法里面不能创建远程调用悲观锁nselect * from xxx where id = xxx for update;乐观锁nselect version fr
Ripple(瑞波)之交易清算
Ripple能展开的话题很多,包括瑞波币(XRP)、共识机制算法(Consensus Process)、路径算法等等,先撇开复杂的算法不说,先直奔主题,看看交易和清算Ripple怎么玩的,所以本文主要阐述基于一致性账本技术的交易和清算方案。Ripple是什么?这个网上资料很多,这里只为后面要讲的主题铺垫一些基本的通俗易懂的解释(几句废话,大咖略过,给个wiki的链接,有兴趣的看原著说明 Rippl...
【支付系统学习笔记】-二支付设计(银行卡支付)
前言:   本文属于学习笔记,首先感谢原作者:凤凰牌老熊,博客链接:http://blog.lixf.cn/  一 支付与交易 作者先明确了概念: 交易是生成订单;支付是对订单进行付款。  支付行为有多种:我们碰到的大部分都是单次支付,其次还有转账和退款。以常见的单次支付来说明流程。 二 银行卡支付 先说大家比较熟悉的银行卡支付,它分为线上支付和线下支付两种形式。线下支付就是通常说
银行批量
银行批量可以分为:日间批量和日终批量。rn所谓的日间批量,就是处理大批数据时,如果采用联机交易,通常会产生超时现象,同时对核心服务压力也很大。如果采用前台(客户端)通过联机交易调用日间批量,让数据处理通过批量服务去完成,而不是核心联机服务。过一会,前台再通过交易查询处理结果。rnrnrnrn总结一下:联机交易可以理解为同步应答方式,日间批量可以理解为异步应答方式。联机交易调用的是核心的服务(是tu
qt 类和对象 银行存款取款
qt 类和对象 具有公有和私有成员的账户类 银行存钱取钱
Hibernate 转账功能 (事务处理)
A转100块给B (简单操作) n数据库的操作思路:首先A的总金额减100,让后B的总金额加100。n事务处理:如果在转账的过程中出现断电等情况不能一次性完成这个操作,则会出现加减操作不同步,导致转账功能不能正常实现。n多用户问题:每用一次openSession,服务器都会new一个新的session空间,这样的话会严重占用系统空间,影响系统个性能。n解决办法:运用本地线程,实现一个session
互联网金融平台——银行交易明细查询和报警机制
1、银行交易明细查询n1.1 接口使用分析;n1.2 避免当日交易明细无效查询的建议策略n1.3 接口使用策略n1.4 关于前置机调用频次n2、关于前置机的报警机制
现代银行集中式业务系统及数据整合
随着互联网和移动互联网的普及,互联网金融也日益进入人们的日常生活。当前互联网金融方兴未艾,各种新颖高效的金融产品层出不穷。随之而来的是日益激烈的竞争。在这次金融革新的大潮中,传统银行暂时处于相对保守的态势。但是这并代表传统银行不能重新占据主动。银行拥有极其详细的金融信息。只要对数据进行深度挖掘,银行完全可以在金融革新的大潮中重新占据主动地位。rnrn传统银行的优势是银行业务系统的集中式交易系统。这
银行交易系统 Control
package jdbc.eduask.banksystem; import java.sql.Connection; import java.util.Scanner; public class Control { static Connection c = null; public static void main(String[] args)throws Excepti
面试常问问题:银行网上支付项目中怎么控制多线程高并发访问?
银行网上支付项目中怎么控制多线程高并发访问?
Android自定义view,PasswordView,交易密码输入框
1、效果图:nnnn2、代码:nnattr.xmlnnnndeclare-styleable name="PasswordView">n attr name="pv_color" format="color|reference" />n attr name="pv_background_color" format="color|reference" />
IE浏览器类似银行网银安全密码输入控件
IE浏览器类似银行网银安全密码输入控件,使用键盘钩子防止被键盘记录器监听密码,使用des对密码加密传输,输入框禁止选择复制,详细见我的博客 http://blog.csdn.net/ldevs/article/details/16809267
银行数据库热备份解决方案
银行数据库热备份应用方案      【方案提要】                       一、银行数据库热备份解决方案提出的背景1     二、银行扩展业务信息系统分析     三、银行业务流程     四、银行的数据处理     五、目前的备份方
接口继承示例:模拟银行存取款
(1)创建基接口IBankAccount,包含存款方法payIn()、取款方法withdraw()、查询余额方法getBalance()。rn(2)创建接口ITransferBankAccount(继承基接口IBankAccount),包含转账方法transferTo()。rn(3)创建类CurrentAccount(实现基接口ITransferBankAccount),包含私有数据成员balan
银行知识点(必背)
1. 一行三会?   一行:中国人民银行(PBOC);   三会:银监会(CBRC),保监会(CIRC),证监会(CSRC)。2. 中国银行体系的组成:由中央银行,监管机构,自律组织和金融机构组成。3. 银行金融机构?政策性银行:国家开发银行、中国进出口银行、中国农业发展银行;中国五大行:工农建中交;政策性银行的特点:贷款利率较低、期限较长,有特定的服务对象4. 商业银行业务(CB) 1)表内业务...
模拟银行sql语句学习
--创建表空间 create tablespace bankspace datafile 'E:\bank\bank.dbf' size 10m autoextend on; --创建用户bankuser create user bankuser identified by bankuser default tablespace bankspace; -- drop 
招商银行企业银行u-bank电子对账单电子回单的导出打印方法
进u-bank招商企业银行,账务查询,交易查询,历史交易,选择日期,点击查询,然后选择保存记录就会生成excel或点击打印记录,就可以打印或直接截图保存. 招商银行的回单打印或导出方式也类似.选择账务查询,批量回单打印,选择日期,打印标志选择预览,下一步,再选择批量保存即可 ...
银行的简单转账代码(java)
就是大二我们上讨论课用的简单代码,希望以后的学弟们能用的着
java基础入门-多线程同步浅析-以银行转账为例子
在说之前先普及一下线程是什么? 线程:说白了就是一个任务片段 进程:是一个具有独立功能的程序关于某个数据集合的一次运行活动,一个进程有一个或者多个线程 线程与进程的本质区别就是有么有数据共享空间,线程之间可以共享数据,进程不可以 下面进入主题:线程间的同步 由于现在业务流程增加,业务节点也增加,使用业务的人员也同时增加,这个时候就不可避免的出现并发问题,多个线程同时访问操
银行卡术语
Q/CUP 中国银联股份有限公司企业标准 Q/CUP 001—2004 银行卡信息交换术语 Glossary 中国银联股份有限公司 发布 Q/CUP 001—2004 银行卡信息交换术语 1 范围 本标准规定了银行卡信息交换中所用到的基本术语。 本标准适用于中国银联股份有限公司成员机构。 2 术语和定义 2.1 ARPC authorization response c
银行欺诈软件再进化:自动转账系统
作者:趋势科技资深威胁研究员Loucif Kharouni        银行和其他金融机构往往会实施更严格的管控,试图将网络钓鱼攻击所造成的损失降到最低。然而网络犯罪分子并没有因此收手,而是开始利用新的工具来实施自动化的网络银行诈骗:自动转账系统。      在这之前,类似ZeuS和SpyEye 这样的恶意软件家族程序会利用Webinject文件修改目标公司的网站(例如银行)。Web
模拟银行系统(数据库设计)
--1.创建数据库 --判断数据库db_bank是否存在,如果存在,先删除该数据库 if EXISTS(select * from sysdatabases where name='db_bank') DROP DATABASE db_bank go --创建数据库 CREATE DATABASE[db_bank] ON PRIMARY ( NAME=N'db_bank', FILENAM
分布式事务下的交易一致性解决方案(逻辑代码结构)
分布式事务下的交易一致性解决方案nnn银行很强势,我们什么都不管(1. 调一次,我出款一次; 2. 不提交任何冥等操作)n我们什么都没有(没有分布式事务)n用户只提交一次n我们只能成功一次nnn一、远程调用与本地事务区分开(别人挂, 我们不挂)nn事务方法里面不能创建远程调用nn悲观锁nselect * from xxx where id = xxx for update;nn乐观锁nselect...
银行sql触发器代码
众所周知,数据库在电脑后台中都是代码的形式,银行中的sql触发器的代码又是怎样的呢?本文我将为大家重点介绍。 触发器是一种特殊的存储过程,在用户试图对指定的表执行指定的数据修改语句时自动执行。下文为大家介绍银行sql触发器代码。 if exists (select * from sysdatabases where name ='BankCard') drop database BankCa
Spring练习:JDBC模板和事务回滚
SSH框架是每个学生毕业前都必须掌握的一门技术,所以这里就用Spring的JDBC模板和自定义异常让事务回滚来做一个练习。主要用到的是spring和struts2框架来操作,这里暂时没用Hibernate来对数据进行操作。 一、练习要求。 要求写一个用户购买股票的项目,用户先开户后登陆,可以在里面买股票和卖股票,当买股票金额超过用户金额时就报异常让事务回滚,用户卖出股票时超过持有数量报异常让事
事务实现原理-回滚原理
1. 每个事务都有个事务id  2. 最终落到 每一个块的原子性。       写一个块,部分写完部分未写完。如何判断是否全写完,如何回滚 如何重写,如何幂等重写? 和mysql的事务比较起来: 1. 对page的写是加锁串行的.  (这样lsn大小判断幂等法才有意义) 2. 回滚操作是要实现的.回滚后才能执行下一个对page的改动.      每次操作有事务id,放在块最后。重写的时
触发器在银行取款机系统中的应用实例
<br />假定系统设计的数据库设计需要两张表:账户信息表(bank)存放账户的信息,交易信息表(transInfo)存放每次的交易信息。数据库名称Test,已经创建。<br />建表:<br />/*建表*/rnuse Test rngorn--创建账户信息表bank和交易表transInfornif exists(select * from sysobjects where name='bank')rn drop table bankrnif exists(select * from sysobject
Java基本功练习十六(继承和多态【继承多态覆盖练习、多重继承、数组线性表ArrayList、银行账户类升级】)
本博文将讲述类的继承和多态的相关情况,先以范例展示各种用法,最后将程序设计过程中容易犯错的地方归纳总结。
财付通绑定工商银行出现“交易失败 错误代码:96110791 失败原因:数据库异常”解决
问题:财付通绑定工商银行出现“交易失败 错误代码:96110791失败原因:数据库异常” 如图:   分析:数据库异常,很可能是插入的数据违反完整性约束。想了想,很有可能是主键重复。因为最开始绑定了财付通,写入了数据库,但是财付通这边没更新,网页上显示不出来你已经绑定了的工商银行账户。打人工客服都是浮云,说什么问财付通那边的客服,重新给个交易编号。我靠,交易编号是别人手工给的嘛。很明
python-银行数据获取
下面是从股驿台网站下载的非上市银行数据代码:from urllib.request import urlopen from bs4 import BeautifulSoup import codecs import os os.chdir(r'C:\Users\zk\PycharmProjects\newstrace\bankdata') count=0 while count&amp;lt;388:...
java爬虫(爬取银行理财数据)
import java.io.IOException; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Calendar; import java.util.Date; import java.util.List; imp
银行支付的业务逻辑和各机构关系
一、
银联的跨行清算体系架构分析
目前实现跨行清算的系统主要有银联跨行清算系统、第三方支付系统、人行的网上支付跨行清算系统(超级网银),本文主要介绍银联的跨行清算系统。跨行清算业务与清算对象首先从业务上讲,银联的支付清算包括清分和资金划拨两个环节。清分是指对交易日志中记录的成功交易,逐笔计算交易本金及交易费用(手续费、分润等),然后按清算对象汇总扎差习惯应收或应付金额,简言之,就是搞清楚今天应该向谁要多少钱,应该给谁多少钱;资金划
银行相关业务常用名词解析
归集:将分级账户中的钱转到总账户中。n台账:区别于会计核算中的账务系统,就是明细记录表,使用者可以自行定义其格式。n前置:银行内部系统与第三方系统之间交互的中介,作用类似于防火墙。n后台:银行内部部署服务的机器,用于处理业务逻辑,一般直接跟数据库相连。n端末:银行内部用于业务操作的终端,负责处理显示逻辑,一般请求后台服务器的服务进行业务处理。nDCC:负责账务处理的主机服务器。n金融行
电子银行交易风险监控产品.pdf
电子银行交易风险监控产品.pdf 电子银行交易风险监控产品.pdf
对银行测试案例编写的一些总结
在编写案例之前,首先先理解该交易对应的需求,把握交易中基本业务流以及备选流。其中基本业务流主要是看该交易的基本功能是否已正确实现;备选流是看涉及到选输项连带出异于基本流的交易页面,以及一些反例的情况。然后根据交易类型或者交易代码来划分大的场景,在大场景下,根据交易类型来划分小的场景。若小场景下还涉及到对应的关联关系,再根据关联关系来细化。最后根据划分的大小场景,根据所对应的需求,加之一些测试案例的
[境内法规]中国人民银行令〔2016〕第3号--金融机构大额交易和可疑交易报告管理办法
中国人民银行令〔2016〕第3号 2016-12-30 20:33 来源: 人民银行网站 【字体:大 中 小】打印     根据《中华人民共和国反洗钱法》、《中华人民共和国中国人民银行法》、《中华人民共和国反恐怖主义法》等法律规定,中国人民银行对《金融机构大额交易和可疑交易报告管理办法》(中国人民银行令〔2006〕第2号发布)进行了修
独立的股票交易系统,自带股票发行、撮合,一致性、高并发,适合高校教学实训
看了前几年开发的一套股票交易系统,颇为满意。虽然花了很多时间和精力,但是和上证所的系统相比较,觉得性价比极高。 股票交易系统最大的要求是安全、一致性高、支持高并发。我在设计时,根据交易规则和下单流程,决定在数据层进行撮合业务,把股票或资金冻结(锁定)业务也放在数据层,速度奇快。另外采用了4层架构,支持分布式部署。 目前使用1cpu2G云服务器,2M网速,交易速度每秒超过10单,由于采用事务机制...
银联数据卡系统银行端联机交易接口规范
银联数据卡系统银行端联机交易接口规范银联数据卡系统银行端联机交易接口规范银联数据卡系统银行端联机交易接口规范银联数据卡系统银行端联机交易接口规范
银行批量代收付性能测试总结
在各大银行中,其中就有批量代收付的交易,这种交易可以用来缴电信、移动和代发工资等,不过随着业务量的增大,批量文件中的交易笔数也在逐渐增加,为了满足生产要求,特对批量代收付进行压力测试,测试内容有下面两个:一个是对一个文件大数据量的测试,例如一个文件中65535条数据;一个是小数据
简单的MySQL银行转账实例
本小鱼这个星期在学习MySQL数据库,完全是从零开始,从下载MySQL安装包,到MySQL的安装,到MySQL的基础知识的学习,到搭建数据库开发环境,一直到现在实现简单的实例。是一步一个脚印。 今天就由小鱼来和大家分享一个利用python来操作MySQL数据库的银行转账实例。 开发环境要求:电脑已安装MySQL软件(小鱼安装的是mysql-installer-community-5.7.20.0版本
干货 | 人工智能如何帮助银行反欺诈:来看看关于银行智能欺诈风险预测模型的研究
作者 | 田江 近年来,伴随移动互联网、虚拟现实等技术的飞速发展,银行服务模式日趋多样化。在客户享受灵活便捷服务的同时,银行欺诈风险呈现出更加隐蔽、专业的特点,发展出更多的作案手法和表现形式。传统欺诈检测通常依赖专家规则、黑名单库等方法,已经不能适应新的欺诈挑战。银行亟需研究并应用先进的机器学习算法,以数据价值为驱动建立智能化的风险预测模型,以此作为欺诈风险防范的强力
打造新一代去中心化代币交易撮合协议,王东想实现代币交易新生态
​ Sherlock 零识区块链专栏记者 王东不仅从业经验丰富,还是个连续创业者。2001年从中科大计算机专业毕业后,他到美国亚利桑那州立大学攻读计算机硕士。毕业后第一份工作在Boston Scientific做心脏起搏器内部软件的研发,2006年加入谷歌做搜索引擎后台以及广告后台研发。2011年,随着谷歌退出中国,他便和谷歌内
银行核心系统
一、银行核心系统的认识 1、所谓的银行核心业务系统,就是面向银行各类业务的交易处理系统,通过交易处理,驱动会计核算和支付清算,最终达到集成化处理后台业务的目标。所核心业务系统是交易处理系统,主要基于以下特点:一是针对合同签订后的系列交易事件,就银行与客户、银行内部或客户之间发生的权利让渡行为及损益关系等信息,进行登记、读取或全程维护;二是完成的交易将成为不可随意改动的信息,交易误操作只能用冲正方式
银行账户(QT)
savingaccount.h:#ifndef SAVINGACCOUNT_H#define SAVINGACCOUNT_Hclass Savingaccount{private: int id; double balance; double rate; int lastDate; double accumulation; void record(int dat...
Java--流水订单号编写Demo
简介:本文将使用Java中String.format()函数、Date()类进行编写流水订单号。关于String.format()函数的相关知识,可参考我的博客: Java--String.format()函数博客收录示例代码如下:package com.example.test; import java.text.SimpleDateFormat; import java.util.Date;...
JDBC 实现事务的回滚
使用JDBC操作事务       再java项目中导入jar包  ——mysql-connector-java-5.1.7-bin.jar;            Connection 客户端连接对象          1.  Connection.setAutoCommit(boolean );//设置自动提交模式,false表示禁用自动提交模式;          2.    用Sav
立即提问