二阶段项目总结

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一直循环,也会出现这种情况。

原文地址:https://www.cnblogs.com/whwjava/p/8849330.html