1. 按需求建表
2. 遵循编码规范,创建项目,包结构
3. 书写该表的CRUD JDBCDao
4. 模拟转账流程 BankDao
4.1转出人扣款
4.2 收款人收款
5. 模拟异常回滚
5.1判断转出人余额是否足够
5.2判断收款人编号是否存在
//查找用户
public void cha() throws SQLException {
//调用方法实例化一个用户数组,用来存放用户
ArrayList<User> listUser =new ArrayList<User>();
//获取链接
Connection connect = OracleDriverUtil.getConnect();
//准备sql
String sql="select * from bank_account";
//装载sql
PreparedStatement ps = connect.prepareStatement(sql);
//执行sql
ResultSet result = ps.executeQuery();
//收参
while (result.next()) {
int id=result.getInt(1);
String num=result.getString("num");
double balance = result.getDouble(3);
//创建用户对象,存放查询数据
User user1 =new User(id,num,balance);
listUser.add(user1);
}
System.out.println(listUser);
}
//增加用户
public boolean zeng(String num,double balance) throws SQLException {
//调用工具
Connection con = OracleDriverUtil.getConnect();
//编写sql
String sql="insert into bank_account(id,num,balance) values(seq_bank_account.nextval,?,?)";
//预装载sql
PreparedStatement ps = con.prepareStatement(sql);
ps.setString(1,num);
ps.setDouble(2,balance);
//调用工具执行sql,并返回结果集
ps.executeUpdate();
System.out.println("增加成功");
//返回
return true;
}
//删除用户
public boolean san(String num) throws SQLException {
//调用工具
Connection con = OracleDriverUtil.getConnect();
//编写sql
String sql="delete from bank_account where num=? ";
//预装载sql
PreparedStatement ps = con.prepareStatement(sql);
ps.setString(1,num);
//调用工具执行sql,并返回结果集
ps.executeUpdate();
System.out.println("删除成功");
//返回
return true;
}
//增加转入账户金额
public boolean gaizeng(double balance,String num) throws SQLException {
//调用工具
Connection con = OracleDriverUtil.getConnect();
//编写sql
String sql="update bank_account set balance=balance+? where num=? ";
//预装载sql
PreparedStatement ps = con.prepareStatement(sql);
ps.setDouble(1, balance);
ps.setString(2, num);
//调用工具执行sql,并返回结果集
ps.executeUpdate();
//返回
System.out.println("转入成功");
return true;
}
//扣除转出用户金额
public boolean gaijian(double balance,String num) throws SQLException {
//调用工具
Connection con = OracleDriverUtil.getConnect();
//编写sql
String sql="update bank_account set balance=balance-? where num=? ";
//预装载sql
PreparedStatement ps = con.prepareStatement(sql);
ps.setDouble(1, balance);
ps.setString(2, num);
//调用工具执行sql,并返回结果集
ps.executeUpdate();
//返回
System.out.println("转出成功");
return true;
}
//查询账号是否存在
public boolean casuer(String num) throws SQLException {
//获取链接
Connection connect = OracleDriverUtil.getConnect();
//准备sql
String sql="select * from bank_account where num=?";
//装载sql
PreparedStatement ps = connect.prepareStatement(sql);
ps.setString(1, num);
//执行sql
ResultSet result = ps.executeQuery();
//收参
while (result.next()) {
return true;
}
return false;
}
//查询转账金额是否足够
public double caqian(String num) throws SQLException {
//获取链接
Connection connect = OracleDriverUtil.getConnect();
//准备sql
String sql="select balance from bank_account where num=?";
//装载sql
PreparedStatement ps = connect.prepareStatement(sql);
ps.setString(1, num);
//执行sql
ResultSet result = ps.executeQuery();
//收参
while (result.next()) {
return result.getDouble(1);
}
return 0;
}
// 从一个用户转到另一个用户
public void zhuanzhang(String num, String anum, double balance) throws SQLException {
// 获取链接
Connection connect = OracleDriverUtil.getConnect();
// 设置不自动提交
connect.setAutoCommit(false);
try {// 异常一,查询转出用户金额是否足够
if (!caqian(num, balance)) {
throw new Exception("用户余额不足,转账无法完成!");
}
// 异常二,查询用户账号是否存在
if (!casuer(anum)) {
throw new Exception("查不到,该用户!请核对后进行!");
}
// 转出用户金额
a.gaijian(balance, num);
// 转入num金额
a.gaizeng(balance, anum);
// 提交事务
connect.commit();
System.out.println("转账成功!");
} catch (Exception e) {
// 事务回滚
connect.rollback();
e.printStackTrace();
System.out.println("转账失败!");
} finally {
OracleDriverUtil.flowClose(connect);
}
}
因篇幅问题不能全部显示,请点此查看更多更全内容