1.学习视频:考试系统的第5节课 以及orm框架封装(1)
    2.学习内容:在今天的直播课上,复习jdbc基础知识点(jdbc六部曲),详细讲解如何将连接数据库的代码冗余如何解决,
    通过封装一个新的方法,将变量通过参数的形式传到方法里,而将一样的部分放在方法体中,需要考虑到参数类型以及返回值的问题,因为对数据的不同操作需要使用的参数类型也不同,通过动态参数列表传递参数可以解决这些问题。**
    3.今天练习的代码:
    1)完成项目知识点 银行系统的存款、取款、转账和销户功能

    1. //观察者模式
    2. //存款
    3. //目标对象 观察者
    4. depositButton.addActionListener(new ActionListener() {
    5. @Override
    6. public void actionPerformed(ActionEvent e) {
    7. try {
    8. String value = JOptionPane.showInputDialog(BankFrame.this, "请输入存款金额");
    9. if (value != null && !"".equals(value)) {
    10. Float f = Float.parseFloat(value);
    11. if (f <= 0) {
    12. throw new NumberFormatException();
    13. }
    14. int count = service.deposit(bname, f);
    15. if (count == 1) {
    16. JOptionPane.showMessageDialog(BankFrame.this, "存款成功");
    17. balanceLabelCN.setText("账号余额:¥:" + service.inpuire(bname));
    18. balanceLabelEN.setText("Account Aalancd:¥:" + service.inpuire(bname));
    19. } else {
    20. JOptionPane.showMessageDialog(BankFrame.this, "抱歉,存款失败");
    21. }
    22. }
    23. }catch (NumberFormatException nef){
    24. JOptionPane.showMessageDialog(BankFrame.this, "抱歉,您输入的金额有误");
    25. }
    26. }
    27. });
    28. //取款
    29. withdrawalButton.addActionListener(new ActionListener() {
    30. @Override
    31. public void actionPerformed(ActionEvent e) {
    32. try {
    33. String value = JOptionPane.showInputDialog(BankFrame.this, "请输入取款金额");
    34. if (value != null && !"".equals(value)) {
    35. Float f = Float.parseFloat(value);
    36. if (f <= 0) {
    37. throw new NumberFormatException();
    38. }
    39. int count = service.withdrawal(bname, f);
    40. if (count == 1) {
    41. JOptionPane.showMessageDialog(BankFrame.this, "取款成功");
    42. balanceLabelCN.setText("账号余额:¥:" + service.inpuire(bname));
    43. balanceLabelEN.setText("Account Aalancd:¥:" + service.inpuire(bname));
    44. } else if(count==-1) {
    45. JOptionPane.showMessageDialog(BankFrame.this, "抱歉,余额不足");
    46. }else {
    47. JOptionPane.showMessageDialog(BankFrame.this, "抱歉,取款失败");
    48. }
    49. }
    50. }catch (NumberFormatException nef){
    51. JOptionPane.showMessageDialog(BankFrame.this, "抱歉,您输入的金额有误");
    52. }
    53. }
    54. });
    55. //转账
    56. transferButton.addActionListener(new ActionListener() {
    57. @Override
    58. public void actionPerformed(ActionEvent e) {
    59. try {
    60. String inname = JOptionPane.showInputDialog(BankFrame.this, "请输入转账用户:");
    61. if (inname != null && !"".equals(inname) && service.isExist(inname)) {
    62. String value = JOptionPane.showInputDialog(BankFrame.this, "请输入转账金额:");
    63. if (value != null && !"".equals(value)) {
    64. Float money = Float.parseFloat(value);
    65. if (money <= 0) {
    66. throw new NumberFormatException();
    67. }
    68. int count = service.transfer(bname, inname, money);
    69. if (count == 2) {
    70. JOptionPane.showMessageDialog(BankFrame.this, "转账成功");
    71. balanceLabelCN.setText("账号余额:¥:" + service.inpuire(bname));
    72. balanceLabelEN.setText("Account Aalancd:¥:" + service.inpuire(bname));
    73. } else if (count == -1) {
    74. JOptionPane.showMessageDialog(BankFrame.this, "抱歉,余额不足");
    75. } else {
    76. JOptionPane.showMessageDialog(BankFrame.this, "抱歉,转账失败");
    77. }
    78. }
    79. }else {
    80. JOptionPane.showMessageDialog(BankFrame.this, "输入账号有误");
    81. }
    82. }catch (NumberFormatException nef){
    83. JOptionPane.showMessageDialog(BankFrame.this, "抱歉,您输入的金额有误");
    84. }
    85. }
    86. });
    87. //===============================================================================
    88. //设计一个方法 存款
    89. public int deposit(String bname,Float bmoney){
    90. Bank bank = bankDao.select(bname);
    91. bank.setBmoney(bmoney+bank.getBmoney());
    92. return bankDao.update(bank);
    93. }
    94. //设计一个方法 取款
    95. public int withdrawal(String bname,Float withdrawalMoney){
    96. Bank bank = bankDao.select(bname);
    97. if(bank.getBmoney()>=withdrawalMoney) {
    98. bank.setBmoney(bank.getBmoney() - withdrawalMoney);
    99. return bankDao.update(bank);//1成功 0没有成功
    100. }else {
    101. return -1;//余额不足
    102. }
    103. }
    104. //转账
    105. public int transfer(String outName,String inName,Float Money){
    106. Bank out = bankDao.select(outName);
    107. Bank in = bankDao.select(inName);
    108. if(out.getBmoney()>=Money){
    109. out.setBmoney(out.getBmoney()-Money);
    110. in.setBmoney(in.getBmoney()+Money);
    111. return bankDao.update(out)+bankDao.update(in);//2成功
    112. }else {
    113. return -1;//余额不足
    114. }
    115. }

    2)对于连接数据库进行增、删、改方法去除冗余的练习

    1. package dao;
    2. import domain.Bank;
    3. import java.sql.Connection;
    4. import java.sql.DriverManager;
    5. import java.sql.PreparedStatement;
    6. public class BankDao {
    7. private String className = "com.mysql.jdbc.Driver";
    8. private String url = "jdbc:mysql://localhost:3306/bank?characterEncoding=UTF-8&useSSL=false";
    9. private String user = "root";
    10. private String password = "root";
    11. //设计一个方法 可以执行任何一个表格的任何一条增删改
    12. public void superUpdate(String sql,Object... obj){
    13. try {
    14. Class.forName(className);
    15. Connection conn = DriverManager.getConnection(url,user,password);
    16. PreparedStatement ps = conn.prepareStatement(sql);
    17. for(int i=0;i<obj.length;i++) {
    18. ps.setObject(i+1,obj[i]);
    19. }
    20. ps.executeUpdate();
    21. ps.close();
    22. conn.close();
    23. } catch (Exception e) {
    24. e.printStackTrace();
    25. }
    26. }
    27. //=====================================================================
    28. //新增
    29. public void insert(String bname,String bpassword,Float bmoney){
    30. String sql = "insert into bs values(?,?,?)";
    31. this.superUpdate(sql,bname,bpassword,bmoney);
    32. }
    33. //删除
    34. public void delect(String bname){
    35. String sql = "delete from bs where bname = ?";
    36. this.superUpdate(sql,bname);
    37. }
    38. //更新-->修改数据
    39. public void update(Bank bank){
    40. String sql = "update bs set bpassword = ? , bmoney = ? where bname = ?";
    41. this.superUpdate(sql,bank.getBpassword(),bank.getBmoney(),bank.getBname());
    42. }
    43. }

    封装了三个方法 update selectOne selectList
    增删改查—->参数采用了Object[]方式
    查询———->采用了策略模式
    问题:
    参数处理的可读性不好
    参数用户DAO使用的时候需要自己注意顺序
    返回值采用了DAO自己提供策略(类->内部类->匿名内部类)