银行账务转账系统(事务处理)
流程如下:
创建项目工程如下:
transfer包下的代码如下:
package beyond.transfer.dao;import java.sql.Connection;
import java.sql.SQLException;import org.apache.commons.dbutils.QueryRunner;import beyond.utils.DataSourceUtils;public class TransferDao {public void out(Connection conn,String out, double money) throws SQLException {QueryRunner runner = new QueryRunner();//不用穿参数//Connection conn = DataSourceUtils.getConnection();String sql = "update account set money= money-? where name=?";runner.update(conn, sql, money,out);}public void in(Connection conn,String in, double money) throws SQLException {QueryRunner runner = new QueryRunner();//不用穿参数//Connection conn = DataSourceUtils.getConnection();String sql = "update account set money= money+? where name=?";runner.update(conn, sql, money,in);}}
package beyond.transfer.service;import java.sql.Connection;
import java.sql.SQLException;import beyond.transfer.dao.TransferDao;
import beyond.utils.DataSourceUtils;public class TransferService {public boolean transfer(String out, String in, double money) {//创建dao层对象TransferDao dao = new TransferDao();boolean isTransferSuccess = true;Connection conn = null;try {//进行事务控制,开启事务conn = DataSourceUtils.getConnection();//不自动开启事务,也就是手动开启事务conn.setAutoCommit(false);//调用dao层的转出钱的方法,只需要知道 转钱的人是谁 跟 钱数 就行dao.out(conn,out,money);//调用dao层的转入钱的方法,只需要知道 转给谁 跟 钱数 就行dao.in(conn,in,money);} catch (SQLException e) {isTransferSuccess = false;try {//当出现事务错误,进行事务的回滚;回滚本身内部不包含提交的功能conn.rollback();} catch (SQLException e1) {e1.printStackTrace();}e.printStackTrace();}finally{try {conn.commit();} catch (SQLException e) {e.printStackTrace();}}return isTransferSuccess;}}
package beyond.transfer.web;import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;import beyond.transfer.service.TransferService;public class TransferServlet extends HttpServlet {public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//接收转账的参数String out = request.getParameter("out");String in = request.getParameter("in");String moneyStr = request.getParameter("money");double money=Double.parseDouble(moneyStr);//进行将转账金额强转//调用业务层的转账方法TransferService service = new TransferService();boolean isTransferSuccess = service.transfer(out,in,money);//解决乱码问题response.setContentType("text/html;charset=UTF-8");if(isTransferSuccess){response.getWriter().write("转账成功!!!");}else{response.getWriter().write("转账失败!!!");}}public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {doGet(request, response);}
}
transfer.jsp代码如下:
<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body><form action="${pageContext.request.contextPath}/transfer" method="post">传出账户:<input type="text" name="out"><br/>传入账户:<input type="text" name="in"><br/>转转金额:<input type="text" name="money"><br/><input type="submit" value="确认转账"><br/></form>
</body>
</html>
数据库创建如下:
CREATE TABLE `account` (`id` int(11) NOT NULL AUTO_INCREMENT,`name` varchar(30) DEFAULT NULL,`money` double DEFAULT NULL,UNIQUE KEY `id` (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8
dbutils包下代码如下:
package beyond.jdbc;import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;public class JDBCDemo {public static void main(String[] args) {//通过jdbc去控制事务Connection conn = null;try {//1,注册驱动 Class.forName("com.mysql.jdbc.Driver");//2,获得connectionconn = DriverManager.getConnection("jdbc:mysql:///web19","root","wsq");//三个///代表本地一个端口//手动开启事务conn.setAutoCommit(false);//是否自动提交false,代表不自动提交也就是手动提交//3,获得操作数据库对象(执行平台)Statement stmt = conn.createStatement();//4,操作sql//stmt.executeUpdate("insert into account values(null,'zhangsan',3000)");int executeUpdate = stmt.executeUpdate("update account set money=5000 where name='sq'");//提交事务conn.commit();stmt.close();conn.close();} catch (Exception e) {try {conn.rollback();} catch (SQLException e1) {e1.printStackTrace();}e.printStackTrace();}}
}
jdbc包下代码如下:
package beyond.jdbc;import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;public class JDBCDemo {public static void main(String[] args) {//通过jdbc去控制事务Connection conn = null;try {//1,注册驱动 Class.forName("com.mysql.jdbc.Driver");//2,获得connectionconn = DriverManager.getConnection("jdbc:mysql:///web19","root","wsq");//三个///代表本地一个端口//手动开启事务conn.setAutoCommit(false);//是否自动提交false,代表不自动提交也就是手动提交//3,获得操作数据库对象(执行平台)Statement stmt = conn.createStatement();//4,操作sql//stmt.executeUpdate("insert into account values(null,'zhangsan',3000)");int executeUpdate = stmt.executeUpdate("update account set money=5000 where name='sq'");//提交事务conn.commit();stmt.close();conn.close();} catch (Exception e) {try {conn.rollback();} catch (SQLException e1) {e1.printStackTrace();}e.printStackTrace();}}
}
utils包下代码如下:
package beyond.utils;import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;import javax.sql.DataSource;import com.mchange.v2.c3p0.ComboPooledDataSource;public class DataSourceUtils {private static DataSource dataSource = new ComboPooledDataSource();private static ThreadLocal<Connection> tl = new ThreadLocal<Connection>();// 直接可以获取一个连接池public static DataSource getDataSource() {return dataSource;}public static Connection getConnection() throws SQLException{return dataSource.getConnection();}// 获取连接对象public static Connection getCuruentConnection() throws SQLException {Connection con = tl.get();if (con == null) {con = dataSource.getConnection();tl.set(con);}return con;}// 开启事务public static void startTransaction() throws SQLException {Connection con = getCuruentConnection();if (con != null) {con.setAutoCommit(false);}}// 事务回滚public static void rollback() throws SQLException {Connection con = getCuruentConnection();if (con != null) {con.rollback();}}// 提交并且 关闭资源及从ThreadLocall中释放public static void commitAndRelease() throws SQLException {Connection con = getCuruentConnection();if (con != null) {con.commit(); // 事务提交con.close();// 关闭资源tl.remove();// 从线程绑定中移除}}// 关闭资源方法public static void closeConnection() throws SQLException {Connection con = getCuruentConnection();if (con != null) {con.close();}}public static void closeStatement(Statement st) throws SQLException {if (st != null) {st.close();}}public static void closeResultSet(ResultSet rs) throws SQLException {if (rs != null) {rs.close();}}}
c3p0-config.xml代码如下:
<?xml version="1.0" encoding="UTF-8"?>
<c3p0-config><default-config><property name="user">root</property><property name="password">wsq</property><property name="driverClass">com.mysql.jdbc.Driver</property><property name="jdbcUrl">jdbc:mysql:///web19</property></default-config>
</c3p0-config>
需要的一系列的jar包如下:
银行账务转账系统(事务处理)相关推荐
- 模拟银行账户转账系统(简单模拟)
本人刚刚接触java,此篇博客仅供初学者浏览,不喜勿喷,若有写的不好的地方欢迎大家指教: *模拟银行账户转账系统: 有A,B两个银行账户,初始金额都为1000元,A,B随机向对方转账,转账金额不得大于 ...
- 在正式使用计算机账务系统的银行对账功能,会计电算化账务处理系统中,银行对账的功能有哪些? 爱问知识人...
一.银行对账 由于企业与银行的账务处理和入账时间不一致,企业和银行之间经常会出现"未达账项",为了能够准确掌握银行存款的实际余额企业必须定期将银行存款日记账与银行出具的对账单进行核 ...
- 银行项目业务系统必备
银行项目业务系统必备 一.业务系统 1.核心业务系统 业务功能包括:总账管理.卡系统管理.客户信息管理.额度控管.存款.贷款.资金业务.国际结算.支付结算.对外接口等. 2.清分清算系统 业务功能包括 ...
- Java银行储户后台系统
Java银行储户后台系统 一.实验目的 二.实验设计 三.实验功能代码 注册账户 登录账户 修改用户信息 删除账户 添加用户 当前账户个人信息查询 所有用户个人信息查询 存钱 取钱 转账 打印清单 修 ...
- 银行信贷流程系统解决方案
银行信贷流程系统解决方案 方案概要 中创软件推出的"银行信贷流程系统解决方案",是基于中创软件自主创新的中间件技术,依托15年的金融应用开发背景,针对金融信贷管理领域的信息化应用现 ...
- python——银行自动提款机系统ATM
目录 管理员类Admin() 管理员Admin类最终代码 人类Person Person类最终代码 信用卡类Card Card类最终代码 ATM类 ATM类最终代码 main()方法 main()方法 ...
- 计算机账务处理流程有,了解账务处理系目标 理解账务处理系统业务流程 理解账务.ppt...
了解账务处理系目标 理解账务处理系统业务流程 理解账务 物理数据模型 4-2.6 账务处理系统数据库设计 2.基本表 业务流程比较分析 比较手工与计算机的账务处理业务流程,可看出二者没有根本性的区别, ...
- 面向对象程序设计——银行ATM机系统
文章目录 针对于面向对象设计--做一个简单的银行ATM机系统 ATM机需求分析 用户类 ATM机类 银行类 注册操作的大概流程 登录操作的大概流程 用户类代码 ATM机类代码 bank类代码(主类) ...
- 银行实时支付系统是怎么躲过双十一这一坎的呢?
这几天,阿里可谓是春风得意,什么900+亿,什么8.59万笔/秒,什么支付成功率达99.99%,平均每笔支付用时0.035秒,什么用时12分28秒成交额就突破100亿元. 作为一个为银行支付行业服务了 ...
最新文章
- 微众银行 CAIO 杨强:人工智能的新三大定律(附视频)
- JavaSE基础笔记八
- 【LaTeX】E喵的LaTeX新手入门教程(4)图表
- spring实战六之使用基于java配置的Spring
- sklearn中的fit_transform和transform以及什么时候使用
- 稀疏和L1正规化(Sparsity and Some Basics of L1 Regularization )
- Python中collections模块
- 洛谷 - P2766 最长不下降子序列问题(最大流+动态规划+思维建边)
- html点击按钮执行php代码,php代码在html文件里面执行的示例
- 【信号与系统】系统特性
- openfoam安装中出现allmake error_如何更新OpenFOAM的版本?
- devops 应用_如何在DevOps中应用系统思考
- mysql备库命令_mysql数据库备份命令
- VS2019打包教程
- 51单片机开发第一步 keilC51 以及 proteus 的安装
- 示波器上1G/S 100MHZ的含义
- Ubuntu Vmware虚拟机网络配置(二)
- php给页面加背景图片,html怎么添加背景图片且让图片平铺整个页面?(代码示例)...
- bugk学习1:宽带信息泄露misc
- 有利可图网_有利可图的项目的目录
热门文章
- mysql 5.7 启动脚本_MySQL数据库 5.7 启动脚本
- linux mysql select_MySQL-Select语句高级应用
- 全局使用dva dispatch
- sessionStorage和localStorage的用法,不同点和相同点
- jQuery获取隐藏域和radio单项框的值
- BZOJ1706奶牛接力跑
- js笔记(五)文档对象模型DOM
- spark SQL(三)数据源 Data Source----通用的数据 加载/保存功能
- Jenkins 入门系列--jenkins 介绍
- 修改窗口图标 AfxRegisterWndClass()