1.学习视频:考试系统的第5节课 以及orm框架封装(1)
2.学习内容:在今天的直播课上,复习jdbc基础知识点(jdbc六部曲),详细讲解如何将连接数据库的代码冗余如何解决,
通过封装一个新的方法,将变量通过参数的形式传到方法里,而将一样的部分放在方法体中,需要考虑到参数类型以及返回值的问题,因为对数据的不同操作需要使用的参数类型也不同,通过动态参数列表传递参数可以解决这些问题。**
3.今天练习的代码:
1)完成项目知识点 银行系统的存款、取款、转账和销户功能
//观察者模式//存款//目标对象 观察者depositButton.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {try {String value = JOptionPane.showInputDialog(BankFrame.this, "请输入存款金额");if (value != null && !"".equals(value)) {Float f = Float.parseFloat(value);if (f <= 0) {throw new NumberFormatException();}int count = service.deposit(bname, f);if (count == 1) {JOptionPane.showMessageDialog(BankFrame.this, "存款成功");balanceLabelCN.setText("账号余额:¥:" + service.inpuire(bname));balanceLabelEN.setText("Account Aalancd:¥:" + service.inpuire(bname));} else {JOptionPane.showMessageDialog(BankFrame.this, "抱歉,存款失败");}}}catch (NumberFormatException nef){JOptionPane.showMessageDialog(BankFrame.this, "抱歉,您输入的金额有误");}}});//取款withdrawalButton.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {try {String value = JOptionPane.showInputDialog(BankFrame.this, "请输入取款金额");if (value != null && !"".equals(value)) {Float f = Float.parseFloat(value);if (f <= 0) {throw new NumberFormatException();}int count = service.withdrawal(bname, f);if (count == 1) {JOptionPane.showMessageDialog(BankFrame.this, "取款成功");balanceLabelCN.setText("账号余额:¥:" + service.inpuire(bname));balanceLabelEN.setText("Account Aalancd:¥:" + service.inpuire(bname));} else if(count==-1) {JOptionPane.showMessageDialog(BankFrame.this, "抱歉,余额不足");}else {JOptionPane.showMessageDialog(BankFrame.this, "抱歉,取款失败");}}}catch (NumberFormatException nef){JOptionPane.showMessageDialog(BankFrame.this, "抱歉,您输入的金额有误");}}});//转账transferButton.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {try {String inname = JOptionPane.showInputDialog(BankFrame.this, "请输入转账用户:");if (inname != null && !"".equals(inname) && service.isExist(inname)) {String value = JOptionPane.showInputDialog(BankFrame.this, "请输入转账金额:");if (value != null && !"".equals(value)) {Float money = Float.parseFloat(value);if (money <= 0) {throw new NumberFormatException();}int count = service.transfer(bname, inname, money);if (count == 2) {JOptionPane.showMessageDialog(BankFrame.this, "转账成功");balanceLabelCN.setText("账号余额:¥:" + service.inpuire(bname));balanceLabelEN.setText("Account Aalancd:¥:" + service.inpuire(bname));} else if (count == -1) {JOptionPane.showMessageDialog(BankFrame.this, "抱歉,余额不足");} else {JOptionPane.showMessageDialog(BankFrame.this, "抱歉,转账失败");}}}else {JOptionPane.showMessageDialog(BankFrame.this, "输入账号有误");}}catch (NumberFormatException nef){JOptionPane.showMessageDialog(BankFrame.this, "抱歉,您输入的金额有误");}}});//===============================================================================//设计一个方法 存款public int deposit(String bname,Float bmoney){Bank bank = bankDao.select(bname);bank.setBmoney(bmoney+bank.getBmoney());return bankDao.update(bank);}//设计一个方法 取款public int withdrawal(String bname,Float withdrawalMoney){Bank bank = bankDao.select(bname);if(bank.getBmoney()>=withdrawalMoney) {bank.setBmoney(bank.getBmoney() - withdrawalMoney);return bankDao.update(bank);//1成功 0没有成功}else {return -1;//余额不足}}//转账public int transfer(String outName,String inName,Float Money){Bank out = bankDao.select(outName);Bank in = bankDao.select(inName);if(out.getBmoney()>=Money){out.setBmoney(out.getBmoney()-Money);in.setBmoney(in.getBmoney()+Money);return bankDao.update(out)+bankDao.update(in);//2成功}else {return -1;//余额不足}}
2)对于连接数据库进行增、删、改方法去除冗余的练习
package dao;import domain.Bank;import java.sql.Connection;import java.sql.DriverManager;import java.sql.PreparedStatement;public class BankDao {private String className = "com.mysql.jdbc.Driver";private String url = "jdbc:mysql://localhost:3306/bank?characterEncoding=UTF-8&useSSL=false";private String user = "root";private String password = "root";//设计一个方法 可以执行任何一个表格的任何一条增删改public void superUpdate(String sql,Object... obj){try {Class.forName(className);Connection conn = DriverManager.getConnection(url,user,password);PreparedStatement ps = conn.prepareStatement(sql);for(int i=0;i<obj.length;i++) {ps.setObject(i+1,obj[i]);}ps.executeUpdate();ps.close();conn.close();} catch (Exception e) {e.printStackTrace();}}//=====================================================================//新增public void insert(String bname,String bpassword,Float bmoney){String sql = "insert into bs values(?,?,?)";this.superUpdate(sql,bname,bpassword,bmoney);}//删除public void delect(String bname){String sql = "delete from bs where bname = ?";this.superUpdate(sql,bname);}//更新-->修改数据public void update(Bank bank){String sql = "update bs set bpassword = ? , bmoney = ? where bname = ?";this.superUpdate(sql,bank.getBpassword(),bank.getBmoney(),bank.getBname());}}
封装了三个方法 update selectOne selectList
增删改查—->参数采用了Object[]方式
查询———->采用了策略模式
问题:
参数处理的可读性不好
参数用户DAO使用的时候需要自己注意顺序
返回值采用了DAO自己提供策略(类->内部类->匿名内部类)
