JDBCUtils工具类实现ATM简易系统
1.先导入相应jar包
2.再进行配置文件
c3p0配置文件 https://blog.csdn.net/qq_36760873/article/details/100084638
其他配置文件都可按照正常jdbc的内容,不写的内容系统会自动进行分配
3.建好相应的数据库如图所示:
ATM数据库下的表client
package com.sram.demo01;
import com.sram.demo01.JDBCUtil;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanHandler;
import org.apache.commons.dbutils.handlers.MapHandler;
import org.apache.commons.dbutils.handlers.ScalarHandler;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.Map;
import java.util.Scanner;
public class ATM {
private static Scanner scanner = new Scanner(System.in);
private static Client client;
public static void main(String[] args) {
boolean flag = true;
do{
System.out.println("1.登录");
System.out.println("2.注册");
String choose = scanner.next();
//登录
if("1".equals(choose)){
flag = !ATMlogin();
while(!flag){//登录成功
ATMmenu();
}
}
//注册
if("2".equals(choose)){
ATMregister();
}
}while(flag);
}
private static void ATMmenu() {
System.out.println("1.查询余额");
System.out.println("2.取钱");
System.out.println("3.存钱");
System.out.println("4.转账");
System.out.println("5.修改密码");
System.out.println("6.退卡");
int choose = scanner.nextInt();
switch(choose){
case 1:
double balance = queryBalance();
System.out.println("您的余额为:"+balance);
break;
case 2:getMoney();break;
case 3:saveMoney();break;
case 4:transfer();break;
case 5:editPassword();break;
case 6:exit();break;
}
}
private static void editPassword() {
System.out.println("请输入账号:");
String id = scanner.next();
System.out.println("请输入旧密码");
String password=scanner.next();
System.out.println("请核对信息:(Y/N)");
//没有查到人
Map map = queryByID(id);
if(map == null){
System.out.println("没有该账户!");
return;
}
String name = map.get("name").toString();
System.out.println(name);
String answer = scanner.next();
if("y".equalsIgnoreCase(answer)){
System.out.println("请输入新密码:");
String password01=scanner.next();
Connection connection = JDBCUtil.getConnecion();
QueryRunner queryRunner = new QueryRunner();
String sql1 = "update client set password=? where id=?";
// String sql2 = "update client set password=? where id=?";
try {
JDBCUtil.startTransaction();
queryRunner.update(connection,sql1,password01,client.getId());
// queryRunner.update(connection,sql1,password01,id);
JDBCUtil.commit();
System.out.println("密码已更改");
} catch (SQLException e) {
e.printStackTrace();
JDBCUtil.rollback();
}finally {
try {
connection.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}else{
System.out.println("密码修改有误,请重新输入!");
}
}
private static void exit(){
System.out.println("业务已完成,是否还要继续办理业务:");
System.out.println("01.继续办理");
System.out.println("02.退出办理");
int choose=scanner.nextInt();
if ("01".equals(choose)){
ATMmenu();
}
if ("02".equals(choose)){
System.out.println("退卡");
JDBCUtil.closeConnction();
// ATM.exit();
}
}
private static void transfer() {
System.out.println("请输入转账对方的账号:");
String id = scanner.next();
System.out.println("请输入转账的金额:");
double money= scanner.nextDouble();
if(money > queryBalance()){
System.out.println("当前余额不足。");
return;
}
System.out.println("请核对对方信息:(Y/N)");
//没有查到人
Map map = queryByID(id);
if(map == null){
System.out.println("没有该账户!");
return;
}
String name = map.get("name").toString();
System.out.println(name);
String answer = scanner.next();
if("y".equalsIgnoreCase(answer)){
Connection connection = JDBCUtil.getConnecion();
QueryRunner queryRunner = new QueryRunner();
String sql1 = "update client set balance=balance-? where id=?";
String sql2 = "update client set balance=balance+? where id=?";
try {
JDBCUtil.startTransaction();
queryRunner.update(connection,sql1,money,client.getId());
queryRunner.update(connection,sql2,money,id);
JDBCUtil.commit();
System.out.println("转账成功");
} catch (SQLException e) {
e.printStackTrace();
JDBCUtil.rollback();
}
}else{
System.out.println("信息有误,重新输入!");
}
}
private static Map queryByID(String id) {
Map map = null;
QueryRunner queryRunner = new QueryRunner(JDBCUtil.getDateSource());
String sql = "select name from client where id=?";
try {
map = queryRunner.query(sql,new MapHandler(),id);
} catch (SQLException e) {
e.printStackTrace();
}
return map;
}
private static void saveMoney() {
System.out.println("请放入少于100张钞票:");
int money = scanner.nextInt();
if(money != 0 && money % 100 == 0){
System.out.println("收到"+money);
QueryRunner queryRunner = new QueryRunner(JDBCUtil.getDateSource());
String sql = "update client set balance = balance+? where id=?";
try {
int rows = queryRunner.update(sql,money,client.getId());
if(rows>0){
System.out.println("正在处理。。。。处理成功!");
//登录用户的余额没有更新
System.out.println("您的余额为:"+queryBalance());
}else{
System.out.println("系统错误。请到柜台处理。");
}
} catch (SQLException e) {
e.printStackTrace();
System.out.println("系统错误。请到柜台处理。");
}
}else{
System.out.println("不能识别小于面值100的钞票");
}
}
private static void getMoney() {
System.out.println("请输入要取的金额:");
int money = scanner.nextInt();
if(money <= queryBalance()){
QueryRunner queryRunner = new QueryRunner(JDBCUtil.getDateSource());
String sql = "update client set balance = balance-? where id=?";
try {
int rows = queryRunner.update(sql,money,client.getId());
if(rows>0){
System.out.println("正在出钞。。。。请拿好");
System.out.println("您的余额为:"+queryBalance());
}else{
System.out.println("系统错误。请到柜台处理。");
}
} catch (SQLException e) {
e.printStackTrace();
System.out.println("系统错误。请到柜台处理。");
}
}else{
System.out.println("余额不足!");
}
}
private static double queryBalance() {
double balance = 0;
QueryRunner queryRunner = new QueryRunner(JDBCUtil.getDateSource());
String sql = "select balance from client where id=?";
try {
balance = queryRunner.query(sql,new BeanHandler<Client>(Client.class),client.getId()).getBalance();
} catch (SQLException e) {
e.printStackTrace();
}
return balance;
}
private static boolean ATMlogin() {
System.out.println("请插入卡:");
String id = scanner.next();
System.out.println("请输入密码:");
String password = scanner.next();
QueryRunner queryRunner = new QueryRunner(JDBCUtil.getDateSource());
String sql = "select * from client where id=? and password=?";
try {
client = queryRunner.query(sql,new BeanHandler<Client>(Client.class),id,password);
if(client == null){
System.out.println("用户名或密码不正确!");
}else{
System.out.println("登录成功!欢迎"+client.getName());
return true;
}
} catch (SQLException e) {
e.printStackTrace();
}
return false;
}
private static void ATMregister() {
System.out.println("请输入真实姓名:");
String name = scanner.next();
System.out.println("请输入身份证号:");
String idcard = scanner.next();
System.out.println("请输入手机号:");
String phone = scanner.next();
System.out.println("请输入密码:");
String password = scanner.next();
QueryRunner queryRunner = new QueryRunner(JDBCUtil.getDateSource());
String sql = "insert into client(name,idcard,phone,password) value(?,?,?,?)";
try {//
int rows =
//返回 插入后的 主键自增的 id 值queryRunner.update(sql,name,idcard,phone,password);
long id = queryRunner.insert(sql,new ScalarHandler<Long>(),name,idcard,phone,password);
if(id>0){
System.out.println("注册成功!您的卡号为"+id);
}else{
System.out.println("注册失败!");
}
} catch (SQLException e) {
e.printStackTrace();
}
}
}
JDBCUtil 类的编译
package com.sram.demo01;
import com.mchange.v2.c3p0.ComboPooledDataSource;
import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.SQLException;
public class JDBCUtil {
public static DataSource dataSource;
public static Connection connection;
static {
dataSource=new ComboPooledDataSource("myconfig");
}
public static DataSource getDateSource(){
return dataSource;
}
public static Connection getConnecion(){
// Connection connection=null;
try {
if (connection==null){
connection=dataSource.getConnection();
}
} catch (SQLException e) {
e.printStackTrace();
}
return connection;
}
public static void startTransaction(){
try {
if (connection.getAutoCommit()){
connection.setAutoCommit(false);
}
} catch (SQLException e) {
e.printStackTrace();
}
}
//TODO 事务相关的方法
public static void commit(){
try {
if (!getConnecion().getAutoCommit()){
getConnecion().commit();
}
} catch (SQLException e) {
e.printStackTrace();
}
}
public static void rollback(){
try {
if (!getConnecion().getAutoCommit()){
getConnecion().rollback();
}
} catch (SQLException e) {
e.printStackTrace();
}
}
public static void closeConnction(){
try {
if (connection!=null){
connection.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
}
}
全部配置完成
即可运行,转账等都可轻松实现。