使用JDBC连接MySQL数据库--典型案例分析(六)----实现账户转账操作
来源:互联网 发布:mac如何使用外置光驱 编辑:程序博客网 时间:2024/05/22 11:11
转载请注明:http://blog.csdn.net/uniquewonderq
问题:使用JDBC连接数据库,实现帐号转账业务。从A账户转账为B账户500元
方案:
本案例中,要实现转账业务,需要执行两次更新操作,一是更新A账户的金额为在原有的金额基础上减去500元;
二是更新B账户的金额为在原有金额的基础上增加500元。这两次更新操作要么全部成功,要么全部失败(事务),来表示转账的成功或失败。如果A账户的金额更新为原来金额基础上减去500元,而B账户去没有在原有金额基础上增加500元,这样就造成了数据的不一致。我们可以使用事务来控制两次更新要么全部成功,要么全部失败。
本案例中,可以可以使用事务将两次更新操作封装成一个逻辑但愿,要么全部执行,要么完全不执行, 保证了数据的完整性。
下列方法实现JDBC事务的基本操作;
Connection.setAutoCommit(boolean)当参数为false时,关闭自动提交
Connection.commit()提交事务
Connection.rollback()回滚事务
使用JDBC控制事务的核心代码如下:
try {con=ConnectionSource.getConnection();stmt=con.createStatement();//更新数据的SQL语句String sql1="update account set amount=amount-"+amount+"where id="+"'"+from+"'";String sql2="update account set amount=amount+"+amount+"where id="+"'"+to+"'";//关闭自动提交con.setAutoCommit(false);//执行SQL语句stmt.executeUpdate(sql1);stmt.executeUpdate(sql2);//提交con.commit();} catch (SQLException e) {try {con.rollback();} catch (SQLException e1) {System.out.println("回滚事务异常!");throw new RuntimeException(e);}System.out.println("数据库访问异常!");throw new RuntimeException(e);}finally{try {if(stmt!=null){stmt.close();}if(con!=null){con.close();}} catch (SQLException e) {System.out.println("释放资源时发生异常!");}}
步骤:
实现此方案需要按照如下步骤进行:
步骤一:创建Account表,并插入测试数据
在Mysql数据库中,创建表并插入测试数据,SQL语句如下所示:
CREATE TABLE account(id CHAR(1),amount NUMERIC(10,2));INSERT INTO account VALUES('A',1000);INSERT INTO account VALUES('B',2000);
步骤二:准备JDBC操作数据库的基本代码
首先,新建类Trans,在该类中新建transfer方法,方法的声明如下:
public void transfer(String from,String to, double amount){}
该方法表示从庄户from转账给账户to,转账金额为amount。
然后,准备数据库连接Connection对象,操作SQL语句的Statement对象并进行异常处理,代码如下所示:
package Account;import java.sql.Connection;import java.sql.SQLException;import java.sql.Statement;import dao.ConnectionSource;public class Trans {public static void main(String[] args) {}public void transfer(String from,String to,double amount){Connection con=null;Statement stmt=null;try {con=ConnectionSource.getConnection();stmt=con.createStatement();} catch (SQLException e) {System.out.println("数据库访问异常!");throw new RuntimeException(e);}finally{try {if(stmt!=null){stmt.close();}if(con!=null){con.close();}} catch (SQLException e) {System.out.println("释放资源时发生异常!");}}}}
步骤三:实现转账功能
使用Connection的setAutoCommit方法,commit方法以及rollback方法来控制事务,以确保转账功能正确实现,代码如下所示:
package Account;import java.sql.Connection;import java.sql.SQLException;import java.sql.Statement;import dao.ConnectionSource;public class Trans {public static void main(String[] args) {}public void transfer(String from,String to,double amount){Connection con=null;Statement stmt=null;try {con=ConnectionSource.getConnection();stmt=con.createStatement();//更新数据的SQL语句String sql1="update account set amount=amount-"+amount+"where id="+"'"+from+"'";String sql2="update account set amount=amount+"+amount+"where id="+"'"+to+"'";//关闭自动提交con.setAutoCommit(false);//执行SQL语句stmt.executeUpdate(sql1);stmt.executeUpdate(sql2);//提交con.commit();} catch (SQLException e) {try {con.rollback();} catch (SQLException e1) {System.out.println("回滚事务异常!");throw new RuntimeException(e);}System.out.println("数据库访问异常!");throw new RuntimeException(e);}finally{try {if(stmt!=null){stmt.close();}if(con!=null){con.close();}} catch (SQLException e) {System.out.println("释放资源时发生异常!");}}}}
步骤四:测试
在Trans类的main方法中,笤俑transfer方法,代码如下所示:
public static void main(String[] args) {Trans trans=new Trans();trans.transfer("A", "B", 500);}运行Trans类,控制台无输出,表示成功,然后查看Mysql数据库中的account表,会发现A账户的金额减少了500元,B账户的金额增加了500元。
运行前:
运行后:
本节结束~
下次,继续,请持续关注哦~
- 使用JDBC连接MySQL数据库--典型案例分析(六)----实现账户转账操作
- 使用JDBC连接MySQL数据库--典型案例分析(一)---员工数据读取与操作
- 使用JDBC连接MySQL数据库--典型案例分析(八)----实现员工数据的分页查询
- 使用JDBC连接MySQL数据库--典型案例分析(九)----财务帐号的DAO设计及其实现
- 使用JDBC连接MySQL数据库--典型案例分析(二)--封装数据库的连接与关闭
- 使用JDBC连接MySQL数据库--典型案例分析(三)----使用Apach DBCP连接池
- 使用JDBC连接MySQL数据库--典型案例分析(四)----更新和插入员工数据
- 使用JDBC连接MySQL数据库--典型案例分析(五)----用户名密码验证功能
- 使用JDBC连接MySQL数据库--典型案例分析(七)----批量插入员工信息
- JDBC 连接MySQL数据库操作案例
- 使用JDBC实现查询和转账操作
- Spring 事务操作(银行转账案例),使用spring 对jdbc的支持完成对数据库的操作
- servlet交互案例分析及终极实现 使用jdbc连接数据库实现
- JDBC连接MySQL数据库实现宠物领养案例
- JDBC连接mysql数据库简单案例
- JDBC连接MySQL数据库——案例
- java jdbc连接mysql数据库实现增删改查操作
- 使用jdbc连接数据库的简单案例
- Redis安装问题
- 1、hamr的安装
- 因子和质数
- 甘特图-----PRM -PS 生产排程
- Letter Combinations of a Phone Number
- 使用JDBC连接MySQL数据库--典型案例分析(六)----实现账户转账操作
- Apache Tika
- SpringMVC源码分析系列
- JAVA编程思想-访问权限控制
- EXT.NET 后台获取MultiComboBox的值(多选框)
- jquery自定义控件验证篇
- 机器学习算法原理与实践(四)、AdaBoost算法详解与实战
- Codeforces Looksery Cup 2015
- 深度学习笔记5:Building Deep Networks for Classification