关于数据库的null小问题

前几天,用wicket做了一个注册界面,但是有以下要求:

1、用户名不能为空,且不能重复(从数据库读取,判定是否重复)。

2、密码必须包含数字和字母的组合,且长度在8~20之间;

3、QQ号只能为大于5位小于10位的数字;

4、安全问题是下拉列表选择框,安全问题答案不少于5个字符,当不满足上述要求时进行必要的提示;

今天在这里主要是想记下当时对数据操作那块出的问题:

用的数据库是MySQL,具体怎么连接,上一篇贴子讲了的,网上资料也多,不祥述了。主要是在查询数据库里的账户名那时,下面是提交注册资料按钮时进行的操作: 

  protected void onSubmit(AjaxRequestTarget target, Form<?> form)
   { // repaint the feedback panel so that it is hidden
    target.addComponent(feedback);
    System.out.println("onSubmit() has excuted!");
    。。。  。。。

    。。。 。。。    
    String seleAccount="select account from userinfo  where account="+"'"+acc+"'";

    //用户名是否重复验证
    UserDAO userdao=new UserDAO();


    List<User> userlist=new ArrayList<User>(); //用一个列表来装查询后的结果集
    
userlist=userdao.select(seleAccount);
    
    if(userlist!=null){
     feedback.error("用户名已经存在");
    }else{
     //验证两次密码要一致
     if(!pas.equals(repas)){
      //用equals()方法来判断两个对象有内容是否相同,切记不可用"=="
      feedback.error("两次密码不一致,请重新输入!");
     }
     else{
      try{ //执行插入操作
       userdao.insert(acc, na, pas, repas, q, favor);
       feedback.error("提交成功");
      }
      catch (SQLException e){
      // TODO Auto-generated catch block
       e.printStackTrace();
      }
     }
    }
   }

 

前面蓝色部分的查询操作,在下面代码中:

public List<User> select(String sql)
    {
    。。。  。。。

     List<User> list = new ArrayList<User>();
     try{
         ReSt = dbAccess.Query(sql);
         while(ReSt.next())

         {
                user.setAccount((String)ReSt.getString("account"));
                list.add(user);
                System.out.println("This account is:"+ReSt.getString(1));
         }
         return list;
     }catch(SQLException e) {
      e.printStackTrace();
      return null;
     }finally{
      dbAccess.close();
      
      if
(!list.isEmpty()){
       System.out.println("查询结果非空");
       return  list;
      }else{
       return null;
      }
     }
    }

本来我是写的list!=null,结果就有问题,按理说,如果在数据库中没查询到与输入同名的帐户名,返回来的肯定是空的,也就是list肯定是个空表,但是list不等于null也对呀。null不是没有,空的意思的吗?怎么用list.isEmpty()——即自带的判断为空的语句就对了呢?后来查了一下这个null与空的区别。

 

参考下面贴子http://jonsion.iteye.com/blog/560719,有所收获。

“java中null的概念:java中,null表示类或变量是空,不代表任何对象或实例,可以将null赋给引用类型变量,但不可以将null赋给基本类型变量。数据库中NULL的概念:数据库中,null表示未填写、未知、不可用的概念,和java不同的是数据库中可以将null赋给任何数据类型。这样一来,我们从数据库中读取字段的值后,在java程序中如何判断读取的值是否为null呢?用x==null方法吗?显然不行,除非这个X是String类型的。ResultSet中的wasNull()方法可以解决这个问题:

wasNull():报告最后一个读取的列是否具有值 SQL NULL。注意,必须首先对列调用一个获取方法尝试读取其值,然后调用 wasNull 方法查看读取的值是否为SQL NULL。

如:String value="";
       int n;
       while(rs.next()){
        value=rs.getString("name");
        if(rs.wasNull()){
         System.out.println("null");
        }else{
         System.out.println(value);
        }
       
        n=rs.getInt("number");
        if(rs.wasNull()){
         System.out.println("null");
        }else{
         System.out.println(n);
        }
       }  ......”

 

另外,数据库中表设置了主键,那么要谨慎对主键的操作,特别是考查其为空还是非空的时候一定要注意,因为你一旦设定某个字段为主键,那么它就不可能再为空了,判断它的空与非空没有意义,且还隐含犯错机会。。。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值