运行结果

实验中解决了用户登录时SQL注入问题,提高了系统的安全性
并且关闭了事务自动提交,开启了事务回滚功能,保证了用户资金的安全性




PowerDesigner16.5建模

数据库源码

drop table if exists userlogin;/*==============================================================*/
/* Table: userlogin                                             */
/*==============================================================*/
create table userlogin
(username             varchar(20) not null,password             varchar(20),primary key (username)
);drop table if exists userstate;/*==============================================================*/
/* Table: userstate                                             */
/*==============================================================*/
create table userstate
(username             varchar(20) not null,money                bigint,primary key (username)
);insert into userlogin(username,password) values('zrs','333');
insert into userlogin(username,password) values('llf','222');
insert into userstate(username,money) values('zrs',20000);
insert into userstate(username,money) values('llf',0);

使用的java模块

java源码

Bank主函数入口:

package Bank;import Mysql.Mysql;
import InitUI.InitUI;
import TransfroUI.*;
import UserLogin.UserLogin;
import java.sql.*;
import java.util.Map;public class Bank {public static void main(String[] args){Connection conn = null;PreparedStatement pstmt = null;ResultSet rs = null;try{conn = Mysql.connection("bank");Map<String,String> map = InitUI.initUI();String uname = map.get("username");String pwd = map.get("password");UserLogin.userLogin(uname,pwd,conn);conn.setAutoCommit(false);transfor(uname,conn);conn.commit();}catch(SQLException e){if(conn != null){try{conn.rollback();System.out.println("事务回滚");}catch(Exception a){a.printStackTrace();;}}e.printStackTrace();}catch(Exception e){e.printStackTrace();}finally{Mysql.close(conn,pstmt,rs);}}private static void transfor(String uname,Connection conn) throws SQLException{Map<String,String> trans = TransforUI.transforUI();String tname = trans.get("transforname");String money = trans.get("money");String[] sql = {"update userstate set money = money+? where username = ?;","update userstate set money = money-? where username = ?","select money from userstate where username = ?"};PreparedStatement pstmt_0 = conn.prepareStatement(sql[0]);PreparedStatement pstmt_1 = conn.prepareStatement(sql[1]);PreparedStatement pstmt_2 = conn.prepareStatement(sql[2]);pstmt_0.setString(1,money);pstmt_0.setString(2,tname);pstmt_1.setString(1,money);pstmt_1.setString(2,uname);pstmt_2.setString(1,uname);int count = pstmt_0.executeUpdate();count += pstmt_1.executeUpdate();ResultSet rs = pstmt_2.executeQuery();rs.next();if(count==2 && rs.getInt("money")>=0){System.out.println("转账成功");}else{System.out.println("余额不足");throw new SQLException();}}
}

Mysql封装源码:

package Mysql;import java.sql.*;public class Mysql{private Mysql(){}//注册驱动static{try{Class.forName("com.mysql.cj.jdbc.Driver");}catch(Exception e){e.printStackTrace();}}//连接数据库public static Connection connection(String database_name) throws Exception{return DriverManager.getConnection("jdbc:mysql://localhost:3306/"+database_name,"root","feifei123");}//释放资源public static void close(Connection conn, PreparedStatement pstmt){if(pstmt != null){try{pstmt.close();}catch(SQLException e){e.printStackTrace();}}if(conn != null){try{conn.close();}catch(SQLException e){e.printStackTrace();}}}//重载释放资源方法public static void close(Connection conn,PreparedStatement pstmt,ResultSet rs){if(rs != null){try{rs.close();}catch(SQLException e){e.printStackTrace();}}if(pstmt != null){try{pstmt.close();}catch(SQLException e){e.printStackTrace();}}if(conn != null){try{conn.close();}catch(SQLException e){e.printStackTrace();}}}
}

用户输入模块源码:

package InitUI;import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;public class InitUI {private InitUI(){}public static Map<String, String> initUI() {Map<String,String> map = new HashMap();Scanner s = new Scanner(System.in);System.out.println("请输入用户名:");String username = s.next();System.out.println("请输入密码:");String password = s.next();map.put("username",username);map.put("password",password);return map;}
}

用户登录检测源码:

package UserLogin;import java.sql.*;
import java.sql.SQLException;
import java.util.Map;
import java.util.ResourceBundle;public class UserLogin {private UserLogin(){}public static void userLogin(String username, String password,Connection conn) throws Exception{String sql = "select * from userlogin where username = ? and password = ?;";PreparedStatement pstmt = conn.prepareStatement(sql);pstmt.setString(1,username);pstmt.setString(2,password);ResultSet rs = pstmt.executeQuery();boolean flag = rs.next()==true?true:false;if(flag){System.out.println(username+"欢迎回来");}else{System.out.println("登录失败,请重新登录");Map<String,String> map =InitUI.InitUI.initUI();String uname = map.get("username");String pwd = map.get("password");userLogin(uname,pwd,conn);}}
}

用户转账检测源码:

package TransfroUI;import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;public class TransforUI {private TransforUI(){}public static Map<String, String> transforUI() {Map<String,String> map = new HashMap();Scanner s = new Scanner(System.in);System.out.println("请输入要转账的用户名:");String username = s.next();System.out.println("请输入要转账的金额:");String password = s.next();map.put("transforname",username);map.put("money",password);return map;}
}

JAVA实验3:Java-MySQL实现银行转账系统相关推荐

  1. Java实验三 Java继承、抽象类与接口(13题)

    文章目录: 一:基本问题 二:说明下面说法是否正确 三:编写一个Java应用程序.设计一个汽车类Vehicle,包含的成员属性有:车轮个数wheels和车重weight.小车类Car是Vehicle的 ...

  2. Java实验01 Java编程基础(猜数字游戏、随机点名器)

    实验一 Java编程基础 实验1-1 随机点名器 一.实验描述 1. 任务描述 编写一个随机点名的程序,使其能够在全班同学中随机点中某一名同学的名字.随机点名器具备3个功能,包括存储全班同学姓名.总览 ...

  3. 数字连连看java实验报告,Java语言实现数字连连看源码

    import javax.swing.*; import java.awt.*; import java.awt.event.*; public class lianliankan implement ...

  4. 基于JAVA+SpringMVC+Mybatis+Vue+MYSQL的房屋租赁系统

    项目介绍 在社会快速发展的影响下,房屋租赁系统继续发展,大大增加了房屋租赁的人数.多样性.质量等等的要求,使房屋租赁系统的管理和运营比过去十年更加理性化.依照这一现实为基础,设计一个快捷而又方便的网上 ...

  5. Java实验2 Java语言基础

    目录 实验内容 (一)声明不同数据类型的变量 (二)了解各种类型的取值范围和变量的使用范围 (三)使用关系运算符和逻辑运算符 (四) 使用表达式语句与复合语句 (五) 使用选择语句 (六) 使用循环语 ...

  6. java实验报告 05 类与_java程序设计类与方法-java实验报告

    java程序设计类与方法-java实验报告 java程序设计类与方法-java实验报告 1. 实验内容或题目 (1) 编写Java应用程序,实现以下功能:当应用程序运行后,根据屏幕提示进行交互式输入并 ...

  7. java数组使用实验报告_JAVA数组与类的定义-java实验报告

    JAVA数组与类的定义-java实验报告 JAVA数组与类的定义-java实验报告 .实验目的与要求 1. 熟悉Java类.对象和方法的一般操作练习等. 2. 熟悉数组等的定义和使用. 二.实验内容及 ...

  8. java实验Employee_java实验报告

    <java实验报告>由会员分享,可在线阅读,更多相关<java实验报告(19页珍藏版)>请在人人文库网上搜索. 1.java实验报告Java实验报告四一实验目的1(巩固有关的概 ...

  9. 云南大学软件学院java实验九_云南大学java实验9

    java实验 (9) 6页 2下载券 Java实验9 4页 2下载券 JAVA实验9 7页 1下载券 java 实验9 暂无评价 1页 免费 Java上机实验9 4页 免费 云大JAVA 实验9图形. ...

最新文章

  1. CSS 样式书写规范
  2. 虚拟存储器--虚拟地址与物理地址
  3. 【leetcode】762. 二进制表示中质数个计算置位
  4. wireMock快速伪造restful服务
  5. 20142335郝昊第三周学习总结
  6. 【emWin】例程六:设置颜色
  7. 去掉窗口_Flink 基础——窗口(Window)理论篇
  8. php的可变函数,php之可变函数的实例详解
  9. linux系统最大打开文件数(/etc/security/limits.conf:待更新其他设置)
  10. leetcode刷题:数组的最大子序和
  11. 怎样做到“不说服客户,只拒绝客户”?
  12. python统计图像灰度直方图_python 对一幅灰度图像进行直方图均衡化
  13. proxysql on github
  14. Eclipse的下载与安装以及JDK环境的配置
  15. eclipse安装yuicompressor插件
  16. jetbrains mono字体安装方法(LInux Windows MacOS系统)
  17. (转载)oracle10g在win10上的安装
  18. 企业微信 java_java企业微信开发之通讯同步
  19. win7如何设置wifi热点_教你win7如何设置网络共享文件夹
  20. PeopleSoft 登录页面更换

热门文章

  1. FMDB数据库的升级
  2. 为什么明明能上网,Windows却显示“无Internet”?
  3. 英语六级写作必备短语词汇1
  4. elixir mix 简介
  5. 计算机取证科普性基础
  6. ISO26262标准概览
  7. PX4二次开发——PX4程序架构
  8. ERP出库审核业务(四十四)
  9. 算法【二叉树】学习笔记 - 已知结点数计算可构建出多少种二叉树
  10. 哈尔滨工业大学软件构造课程笔记第三章第四节