zoukankan      html  css  js  c++  java
  • 二阶段项目总结

    1.如果要定义一个数据过滤的功能,比如说向表内添加数据,但这条数据内的某个字段值重复,这种方法可以在DAO层内用SQL语句来实现如果用纯逻辑判断来筛选,效率过低而且容易犯错。

    另外,比较字符串是否相同要用equals方法!

    2.使用标签功能可打断指定循环,例如

    public Test{
      public void test(){
          int a= 10;
          loop1:
          while(a>0){
             a--;
             while(a<=2){
                break loop1;
             }
         } 
      }  
    }

    3.利用try catch可以使得错误不打断程序继续运行,同时可以给用户返回指定信息

    public void searchCase() {
        try {
        System.out.println("输入开始时间,年月日以横短杠分隔:");
        String start = sc.next();
        System.out.println("输入结束时间,年月日以横短杠分隔:");
        String end = sc.next();
        ArrayList<AccountBook> list = accountBookController.searchAccountBook();
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        Date s = sdf.parse(start);
        Date e = sdf.parse(end);
        System.out.println("序号	收入类型	支出类型	支付类型	金额			建立时间		备注");
        for(int i=0;i<list.size();i++) {
            Date c = sdf.parse(list.get(i).getCreatetime());
            if(c.getTime()>=s.getTime()&c.getTime()<=e.getTime()) {
                     System.out.printf("%d	%d		%d		%d		%f	%s	%s 
    ",
                    list.get(i).getAid(),list.get(i).getGet(),list.get(i).getPay(),list.get(i).getAccount(),
                    list.get(i).getCost(),list.get(i).getCreatetime(),list.get(i).getDescription());    
            }        
         }          
        } catch (ParseException e) {
          System.out.println("日期格式输入错误!");
        }
    }

    在上例的代码中,如果用户输入的的日期不符合定义的格式,不会报ParseException错误,会打印日期格式输入错误!

    另外,这种处理方式也可以用在Scanner中,如果应当输入的是个数字,而用户输入的是字符串,正常会报InputMismatchException错误

    但我们可在catch块里自定义输出一条语句,保证不报错,不打断程序的运行,例如如下代码:

     public void deleteAccountBook() {
             while(true) {
                 try {
                     Scanner s = new Scanner(System.in);
                     System.out.println("输入要删除账务的ID:");
                     searchAll();
                     System.out.println("请输入:");
                     int aid = s.nextInt();//如果这里用户输入的是字符串
                     AccountBook  accountBook = new  AccountBook();
                     accountBook.setAid(aid);
                     if(accountBookController.accountBookCheckID(accountBook)) {
                     }else {
                         System.out.println("该ID不存在!");
                         continue;
                     }
                     accountBookController.deleteAccountBook(accountBook);
                     return;
                } catch (InputMismatchException e) {
                    System.out.println("请输入一个数字!");//则会打印该语句
    //同时注意,这个try catch是在while循环内的,不会打断循环 } } }

    3.resultset的next方法问题:

    如果用同一个resultset的next方法进行两个while循环,则第二个while循环只能从最后一个resultset对象开始,

    因为第一个while循环结束后,指针已经移动到最后一个,第二个while循环会从这里开始。

    4.MySQL查询以及修改问题:

    如果在MySQL内,一个数字类型字段没有赋值,即为null,如果在java中用arraylist返回对象后,读取该对象对应的数值型的成员变量值,

    则该值为零。比如说MySQL有这样一条数据: id 1 (收入类型)get NULL (支出类型)pay 2 那么在JAVA内输出时,对象.getGet()的值是0。

    注意,如果是在resultset内用getString方法,则得到的就是NULL。

    注意:

    在添加、修改有外键约束的数值时,例如该表参考的外键值只有1-7,但是你想让对应值是NULL,那就要用setString,而不要用setInt,对应值为NULL

    public int updateAccountBook(AccountBook accountBook) {
            try {
                Connection conn = DButil.getConn();
                String sql = "update accountbook set get=?,pay=?,account=?,cost=?,createtime=?,description=? "
                        + "where aid =?";
                PreparedStatement ps = conn.prepareStatement(sql);
                if(accountBook.getGet()==0) {
                    ps.setString(1, null);//外键约束,不能直接填0
                }else {
                    ps.setInt(1, accountBook.getGet());
                }
                if(accountBook.getPay()==0){
                    ps.setString(2, null);
                }else {
                    ps.setInt(2, accountBook.getPay());
                }
                ps.setInt(3,accountBook.getAccount());
                ps.setDouble(4, accountBook.getCost());
                ps.setString(5, accountBook.getCreatetime());
                ps.setString(6, accountBook.getDescription());
                ps.setInt(7, accountBook.getAid());
                int r = ps.executeUpdate();
                DButil.close( ps, conn);
                return r;
            } catch (Exception e) {
                e.printStackTrace();
                throw new RuntimeException("修改数据失败"+e);
            }
        }

    5.MySQL DATE数据问题:

    MySQL内的DATE类型字段在JAVA内读取时,如果在MySQL是用yyyy-mm-dd格式添加的值,在JAVA内用getString或者getDate得到的都一个

    yyyy-mm-dd这样格式的值,如果要向表里添加Date类型的值,可以用setString直接添加。

    6.其他应注意的报错:

     

    另外,如果一个while一直循环,也会出现这种情况。

  • 相关阅读:
    461. Hamming Distance
    342. Power of Four
    326. Power of Three
    368. Largest Divisible Subset java solutions
    95. Unique Binary Search Trees II java solutions
    303. Range Sum Query
    160. Intersection of Two Linked Lists java solutions
    88. Merge Sorted Array java solutions
    67. Add Binary java solutions
    14. Longest Common Prefix java solutions
  • 原文地址:https://www.cnblogs.com/whwjava/p/8849330.html
Copyright © 2011-2022 走看看