项目列表:

效果展示:

数据库.sql

/*

Navicat MySQL Data Transfer

Source Server         : mysql

Source Server Version : 50549

Source Host           : localhost:3306

Source Database       : ooxx

Target Server Type    : MYSQL

Target Server Version : 50549

File Encoding         : 65001

Date: 2019-08-16 09:22:04

*/

SET FOREIGN_KEY_CHECKS=0;

-- ----------------------------

-- Table structure for account

-- ----------------------------

DROP TABLE IF EXISTS `account`;

CREATE TABLE `account` (

`aid` int(11) NOT NULL,

`abalance` double DEFAULT NULL,

PRIMARY KEY (`aid`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8;

-- ----------------------------

-- Records of account

-- ----------------------------

INSERT INTO `account` VALUES ('1', '8000');

INSERT INTO `account` VALUES ('2', '9000');

-- ----------------------------

-- Table structure for user

-- ----------------------------

DROP TABLE IF EXISTS `user`;

CREATE TABLE `user` (

`uid` int(11) NOT NULL AUTO_INCREMENT,

`uname` varchar(255) DEFAULT NULL,

`upwd` varchar(255) DEFAULT NULL,

PRIMARY KEY (`uid`),

CONSTRAINT `user_ibfk_1` FOREIGN KEY (`uid`) REFERENCES `account` (`aid`)

) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;

-- ----------------------------

-- Records of user

-- ----------------------------

INSERT INTO `user` VALUES ('1', '李斌', '123456');

INSERT INTO `user` VALUES ('2', '乔治大哥', '123456');

c3p0-config.xml

<?xml version="1.0" encoding="UTF-8"?>

<c3p0-config>

<default-config>
        <property name="driverClass">com.mysql.jdbc.Driver</property>
        <property name="jdbcUrl">jdbc:mysql://localhost:3306/ooxx</property>
        <property name="user">root</property>
        <property name="password">123456</property>

<property name="acquireIncrement">5</property>
        <property name="initialPoolSize">10</property>
        <property name="minPoolSize">5</property>
        <property name="maxPoolSize">20</property>
    </default-config>

</c3p0-config>

JdbcUtil

package com.henu.util;

import com.mchange.v2.c3p0.ComboPooledDataSource;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class JdbcUtil {

private static ComboPooledDataSource ds = null;

//在静态代码块中创建数据库连接池
    static{
        try{
            ds = new ComboPooledDataSource("c3p0-config");//使用C3P0的命名配置来创建数据源

        }catch (Exception e) {
            throw new ExceptionInInitializerError(e);
        }
    }

public static ComboPooledDataSource getDataSourse(){
        return ds;
    }

public static Connection getConnection() throws SQLException{
        //从数据源中获取数据库连接
        return ds.getConnection();
    }

public static void close(Connection conn,Statement st,ResultSet rs){
        if(rs!=null){
            try{
                rs.close();
            }catch (Exception e) {
                e.printStackTrace();
            }
        }
        if(st!=null){
            try{
                st.close();
            }catch (Exception e) {
                e.printStackTrace();
            }
        }

if(conn!=null){
            try{
                conn.close();
            }catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
}

Account

package com.henu.bean;

public class Account {
    private int aid;
    private double abalance;

public Account() {
    }

public Account(int aid, int abalance) {
        this.aid = aid;
        this.abalance = abalance;
    }

public int getAid() {
        return aid;
    }

public void setAid(int aid) {
        this.aid = aid;
    }

public double getAbalance() {
        return abalance;
    }

public void setAbalance(double abalance) {
        this.abalance = abalance;
    }

@Override
    public String toString() {
        return "Account{" +
                "aid=" + aid +
                ", abalance=" + abalance +
                '}';
    }
}

User

package com.henu.bean;

public class User {
    private int uid;
    private String uname;
    private String upwd;
    private Account account;//account放进user中以便多表查询

    public User() {
    }

public User(String uname, String upwd) {
        this.uname = uname;
        this.upwd = upwd;
    }

public User(String uname, String upwd, Account account) {
        this.uname = uname;
        this.upwd = upwd;
        this.account = account;
    }

public User(int uid, String uname, String upwd, Account account) {
        this.uid = uid;
        this.uname = uname;
        this.upwd = upwd;
        this.account = account;
    }

public int getUid() {
        return uid;
    }

public void setUid(int uid) {
        this.uid = uid;
    }

public String getUname() {
        return uname;
    }

public void setUname(String uname) {
        this.uname = uname;
    }

public String getUpwd() {
        return upwd;
    }

public void setUpwd(String upwd) {
        this.upwd = upwd;
    }

public Account getAccount() {
        return account;
    }

public void setAccount(Account account) {
        this.account = account;
    }

@Override
    public String toString() {
        return "User{" +
                "uid=" + uid +
                ", uname='" + uname + '\'' +
                ", upwd='" + upwd + '\'' +
                ", account=" + account +
                '}';
    }
}

UserDao

package com.henu.dao;

import com.henu.bean.User;

import java.sql.Connection;

public interface UserDao {
    User findUserByunameAndupwd(String uanme, String upwd);
    int updateUserAbalance(Connection conn, double d, String uname, String upwd);
    User findUserByUid(int uid);
    int updateToUserAbalance(Connection conn,double d,int aid);
}

UserDaoImpl

package com.henu.dao.impl;

import com.henu.bean.Account;
import com.henu.bean.User;
import com.henu.dao.UserDao;
import com.henu.util.JdbcUtil;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.MapHandler;

import java.sql.Connection;
import java.sql.SQLException;
import java.util.Map;
import java.util.Set;

public class UserDaoImpl implements UserDao {

@Override
    public User findUserByunameAndupwd(String uanme, String upwd) {
        QueryRunner qr = new QueryRunner(JdbcUtil.getDataSourse());
        User user = new User();
        Account account = new Account();
        Map<String,Object> map = null;
        String sql = "select * from user,account where uid=aid and uname=? and upwd=? ";
        try {
            map = qr.query(sql,new MapHandler(),uanme,upwd);
            Set<Map.Entry<String,Object>> entries = map.entrySet();
            for (Map.Entry<String,Object> e : entries
                 ) {
                if ("uid".equals(e.getKey())){
                    user.setUid((int)e.getValue());
                }else if ("uname".equals(e.getKey())){
                    user.setUname((String)e.getValue());
                }else if ("upwd".equals(e.getKey())){
                    user.setUpwd((String)e.getValue());
                }else if ("aid".equals(e.getKey())){
                    account.setAid((int)e.getValue());
                }else if ("abalance".equals(e.getKey())){
                    account.setAbalance((double)e.getValue());
                }
            }
            user.setAccount(account);
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return user;
    }

@Override
    public int updateUserAbalance(Connection conn, double d, String uname, String upwd) {
        User user = findUserByunameAndupwd(uname,upwd);
        QueryRunner qr = new QueryRunner(JdbcUtil.getDataSourse());
        int res = 0;
        int aid = user.getUid();
        double dd = user.getAccount().getAbalance() - d;
        if (dd > 0) {
            Account account = new Account();
            String sql = "update account set abalance=? where aid = ?";
            try {
                res = qr.update(sql, new Object[]{dd, aid});
            } catch (SQLException e) {
                e.printStackTrace();
            }
            user.setAccount(account);
            return res;
        }else{
            return 0;
        }

}

@Override
    public User findUserByUid(int uid) {
        QueryRunner qr = new QueryRunner(JdbcUtil.getDataSourse());
        User user = new User();
        Account account = new Account();
        Map<String,Object> map = null;
        String sql = "select * from user,account where uid = aid and uid = ?";
        try {
            map = qr.query(sql,new MapHandler(),uid);
            Set<Map.Entry<String,Object>> entries = map.entrySet();
            for (Map.Entry<String,Object> e: entries
                 ) {
                if ("uid".equals(e.getKey())){
                    user.setUid((int)e.getValue());
                }else if("uname".equals(e.getKey())){
                    user.setUname((String)e.getValue());
                }else if("upwd".equals(e.getKey())){
                    user.setUpwd((String)e.getValue());
                }else if("aid".equals(e.getKey())){
                    account.setAid((int)e.getValue());
                }else if ("abalance".equals(e.getKey())){
                    account.setAbalance((double)e.getValue());
                }
                user.setAccount(account);
            }

} catch (SQLException e) {
            e.printStackTrace();
        }
        return user;
    }

@Override
    public int updateToUserAbalance(Connection conn,double d, int aid) {
        User user2 = findUserByUid(aid);
        QueryRunner qr = new QueryRunner(JdbcUtil.getDataSourse());
        int res = 0;
        double dd = user2.getAccount().getAbalance()+d;
        Account account = new Account();
        String sql = "update account set abalance=? where aid=?";
        try {
            res = qr.update(sql,new Object[]{dd,aid});
            user2.setAccount(account);
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return res;
    }

}

UserService

package com.henu.service;

import com.henu.bean.User;

import java.sql.Connection;

public interface UserService {
    User serviceLogin(String uname, String upwd);
    double QueryBalance(User user);
    int withdrawal(Connection conn,double d, String uname, String upwd);
    User serviceLoginByUid(int uid);
    int receiveTransfer(Connection conn,double dd,int uid);
}

UserServiceImpl

package com.henu.service.impl;

import com.henu.bean.User;
import com.henu.dao.UserDao;
import com.henu.dao.impl.UserDaoImpl;
import com.henu.service.UserService;

import java.sql.Connection;

public class UserServiceImpl implements UserService {
    UserDao userDao = new UserDaoImpl();
    @Override
    public User serviceLogin(String uname, String upwd) {
        return userDao.findUserByunameAndupwd(uname,upwd);
    }

@Override
    public double QueryBalance(User user) {

double balance = user.getAccount().getAbalance();
        return balance;
    }

@Override
    public int withdrawal(Connection conn, double d, String uname, String upwd) {
        return userDao.updateUserAbalance(conn,d,uname,upwd);
    }

@Override
    public User serviceLoginByUid(int uid) {
        return userDao.findUserByUid(uid);
    }

@Override
    public int receiveTransfer(Connection conn,double dd, int uid) {
        return userDao.updateToUserAbalance(conn,dd,uid);
    }

}

MainClass

package com.henu;

import com.henu.bean.User;
import com.henu.service.UserService;
import com.henu.service.impl.UserServiceImpl;
import com.henu.util.JdbcUtil;

import java.sql.Connection;
import java.sql.SQLException;
import java.util.Scanner;

public class MainClass {
    public static void main(String[] args) {

Scanner sc = new Scanner(System.in);
        System.out.println("Welcome to mengdong bank!");
        System.out.println("Please enter your name:");
        String uname = sc.nextLine();
        System.out.println("Please enter your pwd:");
        String upwd = sc.nextLine();

UserService uService = new UserServiceImpl();
        User user = new User();
        try {
            user = uService.serviceLogin(uname, upwd);
        }catch (NullPointerException e){
            throw new RuntimeException("No such user!Please restart the program!");
        }

boolean flag = true;
        while(flag){
            System.out.println("--------------------------------");
            menu();
            System.out.println("--------------------------------");
            System.out.println("Please enter your choose:");
            String choose = sc.nextLine();
            switch (choose){
                case "1" :
                    User newUser = uService.serviceLogin(uname,upwd);
                    double d1 = uService.QueryBalance(newUser);
                    System.out.println("********************************");
                    System.out.println("Your Balance is:" + d1);
                    System.out.println("********************************");
                    flag = true;
                    break;
                case "2" :
                    System.out.println("Please enter your withdrawal amount:");
                    String str = sc.nextLine();
                    double d2 = Double.parseDouble(str);
                    Connection conn1 = null;
                    try {
                        conn1 = JdbcUtil.getConnection();
                        conn1.setAutoCommit(false);
                        uService.withdrawal(conn1,d2,uname,upwd);
                        conn1.commit();
                    } catch (SQLException e) {
                        e.printStackTrace();
                        try {
                            conn1.rollback();
                        } catch (SQLException e1) {
                            e1.printStackTrace();
                        }
                    }
                    System.out.println("********************************");
                    System.out.println("You withdraw "+ d2 + " yuan in cash.");
                    System.out.println("********************************");
                    flag = true;
                    break;
                case "3" :
                    System.out.println("Please enter the user id you want to transfer:");
                    String str2 = sc.nextLine();
                    System.out.println("Please enter your transfer amount:");
                    String str3 = sc.nextLine();
                    int to = Integer.parseInt(str2);
                    double d3 = Double.parseDouble(str3);
                    if (to == user.getUid()){
                        System.out.println("********************************");
                        System.err.println("Here is your account number!");
                        System.out.println("********************************");
                    }else {
                        User user2 = null;
                        try {
                            user2 = uService.serviceLoginByUid(to);
                        } catch (NullPointerException r) {
                            System.err.println("********************************");
                            System.err.println("There is no such user id!");
                            System.err.println("********************************");
                        }
                        if (user2 != null) {
                            Connection conn = null;
                            try {
                                conn = JdbcUtil.getConnection();
                                conn.setAutoCommit(false);
                                uService.withdrawal(conn, d3, uname, upwd);
                                uService.receiveTransfer(conn, d3, user2.getUid());
                                conn.commit();
                            } catch (Exception e) {
                                System.err.println("System error!");
                                try {
                                    conn.rollback();
                                } catch (SQLException e1) {
                                    e1.printStackTrace();
                                }
                            }
                            System.out.println("********************************");
                            System.out.println("Transfer Success!");
                            System.out.println("********************************");
                        } else {
                            System.err.println("********************************");
                            System.err.println("There is no such user id!");
                            System.err.println("********************************");
                        }
                    }
                    flag=true;
                    break;
                case "4" :
                    flag = false;
                    System.exit(0);
                    break;
                default:
                    System.err.println("Your input error!!!");
                    flag = true;
                    break;
            }
        }

}
    public static void menu(){
        System.out.println("Welcome to the homepage!!!");
        System.out.println("We provide the following functionality!");
        System.out.println("1.Query balance");
        System.out.println("2.withdrawal");
        System.out.println("3.transfer accounts");
        System.out.println("4.exit");
    }

}

对于多表查询和转账的事务提交相关推荐

  1. MySQL数据库(四):多表查询、视图、事务、索引、函数、Go连接MySQL

    MySQL数据库:视图.事务.索引.函数.Go连接MySQL 1.1 目录 文章目录 1.1 目录 1.2 多表查询分类 1.2.1 内连接[inner join] 1.2.2 左外连接[left j ...

  2. sqlserver ADO.net 查询数据库加锁,事务提交

    //逻辑:查询表最大单号,然后锁表(TABLOKX) ,然后执行事务using (SqlConnection conn = EFContext.Database.Connection as SqlCo ...

  3. asp多表查询并显示_MySQL多表查询与事务

    回顾 1. DQL单表高级查询条件 where比较运算逻辑运算符in关键字between关键字if null关键字like关键字% 多个任意字符_ 单个任意字符排序 order byascdesc聚合 ...

  4. 多表查询事务DCL权限管理

    多表查询: * 查询语法:select列名列表from表名列表where.... * 准备sql# 创建部门表CREATE TABLE dept(id INT PRIMARY KEY AUTO_INC ...

  5. day15(mysql 的多表查询,事务)

    mysql之多表查询 1.合并结果集 作用:合并结果集就是把两个select语句查询的结果连接到一起! /*创建表t1*/ CREATE TABLE t1(a INT PRIMARY KEY ,b V ...

  6. 在mysql数据库中,多表查询,事务,DCL,

    多表查询: * 查询语法:select列名列表from表名列表where.... * 准备sql# 创建部门表CREATE TABLE dept(id INT PRIMARY KEY AUTO_INC ...

  7. 一、TCL事务控制语言 二、MySQL中的约束 三、多表查询(重点) 四、用户的创建和授权 五、MySQL中的索引...

    一.TCL事务控制语言 ###<1>事务的概念 事务是访问并可能更新数据库中各种数据项的执行单元. 事务是一条SQL语句,一组SQL语句,或者整个程序. 事务是恢复和并发控制的基本单位. ...

  8. java day28【多表查询 、事务 、DCL】

    第一章  多表查询 * 查询语法: select 列名列表 from 表名列表 where.... * 准备sql # 创建部门表 CREATE TABLE dept( id INT PRIMARY ...

  9. 《MySQL》入门基础知识点大全:数据库操作、增删改查、联表查询、常用函数、MD5加密、事务特性、隔离级别

    MySQL基础知识大全 1.操作数据库 1.1 创建表 1.2 修改表名 1.3 增加表的字段 1.4 修改表的字段 1.4.1 修改表的字段 1.4.2 修改表名 1.5 删除表的字段 1.6 删除 ...

最新文章

  1. Windows Embedded Standard开发初体验(四)
  2. 动手打造自己强大的右键菜单
  3. C#中关于处理两个大数相乘的问题
  4. 简明python教程在线-简明python教程
  5. 面试的算法2(C语言)(整理)
  6. centos 7 php7.4_索尼小音箱特价!【Aldi】7月7日起 特卖品 及本期特价食品
  7. [Unity]限制两个物体之间的距离
  8. python利用自动识别写模块_教你用Python 实现自动导入缺失的库
  9. ProtoBuf3语法指南(Protocol Buffers)_下
  10. IC卡读写器c#源代码
  11. VSCode 如何修改字体
  12. oracle表转换mysql建表语句
  13. Python+Django+vue的旅游信息网站系统项目源码介绍
  14. 这样的文件操作有点玄——文件流学习 ( 二 )
  15. python将Word中表格复制到Excel中
  16. 如何利用python计算即期利率_QuantLib 金融计算——案例之固息债的价格、久期、凸性和 BPS...
  17. 应届生如何准备校招【研发岗】
  18. img和文字都居中对齐
  19. Tight WCRT Analysis of Synchronous C Programs
  20. JConsole:Java监视与管理控制台

热门文章

  1. LOJ - #117. 有源汇有上下界最小流(有源汇有上下界的最小流)
  2. 洛谷 - P4014 分配问题(费用流/KM)
  3. CH - 6802 車的放置(二分图最大匹配)
  4. UVA10603 倒水问题
  5. html5伪类效果延缓,CSS3实现伪类hover离开时平滑过渡效果示例
  6. 天锋w2019_不知道为什么那么多人喜欢三星W2019,直到入手这款天锋W2019手机
  7. HDU3929(容斥原理)
  8. Win10任务计划+PowerShell实现Git自动推送
  9. 对现有的所能找到的DDOS代码(攻击模块)做出一次分析----UDP篇
  10. 1.5 MFC封装思想