简单模拟支付宝转账系统
来源:互联网 发布:linux piwik 安装 编辑:程序博客网 时间:2024/04/29 04:51
此案例为加深对数据库操作时,对事务的理解,当转钱过程中由于某些原因发生错误时,会出现A的钱变少而B
无改变的状况,或是其他不正确的情况,注意正确的是A转给B10元,A-10 B+10,这个时候就需要使用Connection
的三个方法
首先,将自动提交设置为false,这里的自动提交指的是对sql语句的提交编译
通常状况下,默认是自动提交的,当调用PreparedStatement对象的execute方法时,就会自动提交
conn.setAutoCommit(false);
然后,在设置了false以后,就需要手动提交
conn.commit();
最后,当发生错误时,使用conn.rollback();可以撤销对数据库已做的改变,恢复原状
该方法通常写在catch中,且方法本身也需要try-catch
案例代码:
共四个类,其中DBUtil工具类获得Connection的对象
两个javabean模式的实体类,这里不贴代码了
最后的测试类,核心代码,方法包装时和选课系统虽然有不同,但也有相似之处
博主想过把jdbc封装成一个方法,但是有的sql语句需要设定?值,有的不需要,且设定的?值不确定是几个
还没有找到合适的处理方法
package userMoveMoney;import java.sql.Connection;import java.sql.PreparedStatement;import java.sql.ResultSet;import java.sql.SQLException;import java.util.Scanner;public class MyTest {public static Scanner console=new Scanner(System.in);public static Connection conn=DBUtil.getConnection();public static void main(String[] args) {createUser();login();}/** * 创建客户 * @return */public static User createUser(){System.out.println("------------CREATE USER--------------");System.out.println("Please input you username");String username=console.next();System.out.println("Please input you password");String password=console.next();System.out.println("Please input you password again");String password2=console.next();if(password.equals(password2)){User user=new User(username,password);System.out.println("Create user success!");saveUserToSql(user);return user;}else{System.out.println("The password is wrong,do you want re-create? 0/1");int info=console.nextInt();if(info==1){createUser();}else{System.exit(0);}return null;}}/** * 保存到数据库中 * @param user */private static void saveUserToSql(User user){PreparedStatement ptmt;String sql="INSERT users(username,password) VALUES(?,?)";try {ptmt=conn.prepareStatement(sql);ptmt.setString(1,user.getUsername());ptmt.setString(2, user.getPassword());ptmt.execute();} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();}}/** * 登陆 */public static void login(){System.out.println("-------------LOGIN---------------");System.out.println("Please input you username:");String username=console.next();System.out.println("Please input you password:");String password=console.next();String sql="SELECT password FROM users WHERE username=?";PreparedStatement ptmt;ResultSet rs;String checkPassword=null;try {ptmt=conn.prepareStatement(sql);ptmt.setString(1,username);ptmt.execute();rs=ptmt.getResultSet();while(rs.next()){checkPassword=rs.getString("password");}} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();}if(password.equals(checkPassword)){System.out.println("Login succcess!");checkIsUserWantMoveMoney(username);}else{System.out.println("Login fail!");}}/** * 判断用户是否想转钱 */private static void checkIsUserWantMoveMoney(String userFromName){System.out.println("Do you want to move money to other account?0/1");int info=console.nextInt();if(info==0){System.out.println("GOOD BYE!");}else{getMoveMoneyInfo(userFromName);}}/** * 获得收钱方的姓名和转钱金额 */private static void getMoveMoneyInfo(String userFromName){System.out.println("Please input name who is gonna accept the moeny:");String userToName=console.next();boolean flag=checkUserExist(userToName);if(flag){System.out.println("Please input money you want to move:");int userToDeposit=console.nextInt();moveMoney(userFromName,userToName,userToDeposit);System.out.println("Move Money Success!");}else{System.out.println("No such account exist");}}/** * 转钱 * @param userToName * @param userToDeposit */private static void moveMoney(String userFromName,String userToName,int userToDeposit){String sql="UPDATE users SET userDeposit=userDeposit+? WHERE username='"+userToName+"'";String sql2="UPDATE users SET userDeposit=userDeposit-? WHERE username='"+userFromName+"'";PreparedStatement ptmt;try {conn.setAutoCommit(false);ptmt=conn.prepareStatement(sql);ptmt.setInt(1, userToDeposit);ptmt.execute();ptmt=conn.prepareStatement(sql2);ptmt.setInt(1, userToDeposit);ptmt.execute();conn.commit();} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();try {conn.rollback();} catch (SQLException e1) {// TODO Auto-generated catch blocke1.printStackTrace();}}}/** * 判断用户名是否存在 * @param userToName * @return */private static boolean checkUserExist(String userToName){String sql="SELECT username,userID FROM users WHERE username='"+userToName+"'";PreparedStatement ptmt;ResultSet rs;boolean flag=false;try {ptmt=conn.prepareStatement(sql);ptmt.execute();rs=ptmt.getResultSet();flag=rs.next();} catch (SQLException e) {e.printStackTrace();}if(flag){return true;}else{return false;}}}
创建一个用户,登陆,然后选择用户进行转账,会自动判断是否存在此用户
其实应该设置的更加具有互动性,再添加一个方法,判断是新用户还是旧用户,是否需要注册
已经注册是也要判断是否已经存在同样的用户名
0 0
- 简单模拟支付宝转账系统
- 模拟银行账户转账系统(简单模拟)
- 支付宝转账支付方式
- C#模拟银行转账系统
- 支付宝转账想到的
- Android——简单模拟银行转账
- 支付宝博客捐赠之转账篇
- 支付宝自动跳入转账页面
- Android跳转到支付宝转账界面
- Android开发——使用ADB Shell命令实现模拟点击(支付宝自动转账实现)
- 澳洲将推新支付系统 实现跨行实时转账
- 如何用支付宝对支付宝转账
- 支付宝 单笔转账到支付宝账户接口
- 商城转账到卖家账户的支付宝方案:支付宝单笔转账
- 模拟支付宝支付
- 支付宝单笔转账实现
- python操作MySQL 模拟简单银行转账操作
- python操作MySQL 模拟简单银行转账操作
- 利用.htaccess文件的 Rewrite 规则隐藏URL中的 index.php
- Struts2
- BZOJ 2330 查分约束
- 第一节:开发工具介绍及环境变量配置(讲师笔记篇)
- 编译链接的全过程
- 简单模拟支付宝转账系统
- 读取堆区,栈区地址及结论
- 个人的管理
- LCD控制器与帧率、刷新率的关系分析
- handler机制简析
- spring定时器配置文档
- 新开通了博客
- 【Python】基于MQTT的聊天客户端
- 经典算法学习——交换二叉树的左右子树(二叉树的翻转)