搜索
您的当前位置:首页正文

Oracle项目实践(银行账户bank_account系统)

来源:步旅网

Oracle项目实践(银行账户bank_account系统)

需求:
开发文档:
1. 按需求建表
2. 遵循编码规范,创建项目,包结构
3. 书写该表的CRUD JDBCDao
4. 模拟转账流程 BankDao
	4.1转出人扣款
	4.2 收款人收款
5. 模拟异常回滚
	5.1判断转出人余额是否足够
	5.2判断收款人编号是否存在
开战
1.创建Test_Bank数据库,预插入用户数据

2.编写Test_Bank项目

3.实现Dao层:增、删、改、查(主要代码)
//查找用户
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;
}
4.用户之间转账流程
	// 从一个用户转到另一个用户
	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);
		}

	}

因篇幅问题不能全部显示,请点此查看更多更全内容

Top