如下SQL语句:
select sum(ui.percent) from Catalog ui where ui.superiorId = ? and ui.postId = ?数据表Catalog里没值 sql语句查出的值放在l中,l是list型;if (l != null && !l.isEmpty()) {
      return 1;
      }
      else {
        return 0;
      }问:判断语句的结果是1还是0; 

解决方案 »

  1.   

    最好说说理由,帮我理一理!顺便贴个报错:class java.lang.NullPointerException看看有可能是啥原因造成的啊?
      

  2.   

    我已经加了异常处理,似乎没有到异常的位置,结果返回1.但我始终认为应该返回0.
    public int getAllCatalogNum8(long superiorId, long postId) {
        try {
         Object[] values = {new Long(superiorId), new Long (postId)};
          List l = getHibernateTemplate().find(LOAD_ALL_COUNT2,  values);
          if (l != null && !l.isEmpty()) {
            return 1;
          }
          else {
            return 0;
          }
        }
        catch (DataAccessException ex) {
          logger.error(ex);
          return 0;
        }
      

  3.   

    数据库采用ORACLE,我在数据库里运行过上面的SQL语句,查出结果是空值,截图如下:
    http://info.sugang.com.cn/ima/error.jpg
    根据查询结果,上述判断应该返回0才对啊,可结果是返回1,实在不能理解,请高手指教!~
      

  4.   

    public int getAllCatalogNum8(long superiorId, long postId) {
        try {
         Object[] values = {new Long(superiorId), new Long (postId)};
          List l = getHibernateTemplate().find(LOAD_ALL_COUNT2,  values);
          if (l != null && !l.isEmpty()) {
            return 1;
          }
          else {
            return 0;
          }
        }
        catch (DataAccessException ex) {
          logger.error(ex);
          return 0;
        }其中LOAD_ALL_COUNT2:指的就是上面的SQL
    定义如下:
    private static final String LOAD_ALL_COUNT2 =
    "select sum(ui.percent) from Catalog ui where ui.superiorId = ? and ui.postId = ?";
      

  5.   


    你在这里判断的是list中是不是有数据,而hibernate中求和之后list中不为空,所以按你写得
    if (l != null && !l.isEmpty()) {
          return 1;
          }
          else {
            return 0;
          }则返回1
      

  6.   

    楼上的,在HIBERNATE中求和后LIST中为什么不为空?
      

  7.   

    if (l != null && !l.isEmpty()) ......
    -----------------------------------
    执行if语句时l已经是一个null了(原因:数据表Catalog里没值),所以程序无法执行l != null和!l.isEmpty(),因此抛出NullPointerException,并且程序终止,此时应该没有返回值。
    另:判断一个result是否为空可以这样判断:if (null != result && result.size() > 0)......
      

  8.   

    但是程序执行了l != null和!l.isEmpty(),返回了1
      

  9.   

    如果程序能执行l != null和!l.isEmpty(),说明l不为null,你可以在程序里看看l的size(),也可以看看l的element是什么,getHibernateTemplate().find(LOAD_ALL_COUNT2,  values)有可能会返回一个永远不为null的List,看看它的API就知道了.....
      

  10.   

    我如果要看L的size()或者element,该如何写呢?请指教!
      

  11.   

    看l的size():System.out.println(l.size());
    看l的elements:
    if (l.size() > 0)
    {
        for (int i = 0; i < l.size(); i++)
        {
            System.out.println(l.get(i));
        }
    }
      

  12.   

    现在就是在System.out.println(l.get(i));时出错的,
      

  13.   

    虽然你的Catalog表里没有数据,但你取得是sum聚合函数,就算没有取到东西也会返回一个查询结果,我在sqlserver里面试下来的结果是返回NULL,list里面应该就存了一个NULL的字符串。所以l != null && !l.isEmpty()这个判断返回的true,当然return 1;了。这个就好像虽然表里没有数据,但取count(*)还是能返回一个0的道理是一样的。
      

  14.   

    既然有对象就应该可以输出呀:System.out.println(((Integer) l.get(0)).intValue()); 
    但是不行呀,一输出就报错class java.lang.NullPointerException,那怎么回事?那我需要用到这个值怎么办?那怎么判断list里是不是这个对象?主要想用list里的值跟其他int的值进行加减乘运算,但如果是空值,运算就会出错,所以我要把这种情况排除,那就得加判断呀,但这个判断不知道怎么写,之前写的,你也看到了不行,所以请帮帮忙吧 
     
      

  15.   

    System.out.println(((Integer) l.get(0)).intValue()); 
    报java.lang.NullPointerException说明 l的值为null
      

  16.   

    换向思维,不要用sum,直接求出那个值,再循环相加
      

  17.   

    谢谢大家的关注!~特别是最后athena530,我换了方法,解决了此问题.谢谢