在一个应用中有这样的一行代码:
Vector w=cccc.functiona(String a);在cccc中
public Vector functiona(String a)
{
Vector ss=new Vector();
..........
执行查询操作,得到结果集
ss.add();
...
return  ss
}问题是:如果cccc.functiona(String a)得到的结果集是空null
如何判断X为空?
以下无效:
if(!w.isEmpty())
System.out.println((String)w.get(0));
else
System.out.println("==0"); if(w.size()!=0)
System.out.println((String)w.get(0));
else
System.out.println("==0");
if(w!=null)
System.out.println((String)w.get(0));
else
System.out.println("==0");
当cccc.functiona(String a)为空时,w.size()==1
都不能输出"==0";

解决方案 »

  1.   

    你所知的X是什么?
    cccc.functiona(String a)为空时,w.size()==1?此时w.size()不是应该等于0吗?
      

  2.   

    if (w == null) System.out.pritnln("w is null");
    else if (w.size() == 0) System.out.println("w is empty");
    else ...
      

  3.   

    结果集是null,ss里怎么会有数据??
      

  4.   

    lz的代码有问题if(w!=null) System.out.println((String)w.get(0));
    w不为null,就能保证w有元素,这么写肯定是不对的。你的代码可以写为:
    if (w != null && w.size() != 0) //size() == 0与isEmpty()是一回事
    System.out.println((String) w.get(0));
    else
    System.out.println("null or empty");这么写你再测试测试,应该就是对的了。
      

  5.   

    在cccc.functiona(String a)中,假设你的表b中w字段是数值型的
    a 是一个查询语句,将a 写成a="select * from b where w='20010x"
    cccc.functiona(String a)的结果一定是null
    而在Vector w=cccc.functiona(String a);后,你用System.out.println("wlength="+w.size())
    看看结果,是不是1
      

  6.   

    在cccc.functiona(String a)中,假设你的表b中w字段是数值型的
    a 是一个查询语句,将a 写成a="select * from b where w='20010x"
    ==>这是一个正确的SQL语句吗?cccc.functiona(String a)的结果一定是null
    ==>这是在调用方法functiona吗?应该是cccc.funcationa(a)吧?
    ==>你怎么确定这个结果一定是null呢?
    ==>null是什么呀?你明白吗?而在Vector w=cccc.functiona(String a);后,你用System.out.println("wlength="+w.size())
    看看结果,是不是1
    ==>如果size()返回1的话,w会是null吗?
      

  7.   

    把public Vector functiona(String a)中ss.add()那块帖出来,肯定有错
      

  8.   

    在cccc.functiona(String a)中,假设你的表b中w字段是数值型的
    a 是一个查询语句,将a 写成a="select * from b where w='20010x"
    ==>这是一个正确的SQL语句吗?cccc.functiona(String a)的结果一定是null
    ==>这是在调用方法functiona吗?应该是cccc.funcationa(a)吧?
    ==>你怎么确定这个结果一定是null呢?
    ==>null是什么呀?你明白吗?而在Vector w=cccc.functiona(String a);后,你用System.out.println("wlength="+w.size())
    看看结果,是不是1
    ==>如果size()返回1的话,w会是null吗?
    --------------------------------------------------------------------实际应用是一个对oracle9的查询;
    用一个Vector接收查询结果,
    假设数据库刚建立,那么查询结果就是null,这种情况是存在的,必须考虑,
    这种情况下,要判断返回的Vector是否为空,是空,不处理,不是要进行取值
    Vector x=cccc.function(a);
    if(x是空)
    return ;
    不空:
    String b=(String)x.get(0);
    继续处理,现在是无法判断x为空
      

  9.   

    实际应用是一个对oracle9的查询;
    用一个Vector接收查询结果,
    假设数据库刚建立,那么查询结果就是null,这种情况是存在的,必须考虑,
    ==>我的理解是,数据库刚建立,里面没有数据,空的。这种情况跟没有对应数据是一样的呀,就是Query结果是空的,没有数据。
    ==>但是,null是这个意思吗?这种情况下,要判断返回的Vector是否为空,是空,不处理,不是要进行取值
    ==>null是空吗?
    ==>空是说Vector是空的,里面没有数据。
    ==>null是什么意思呀?是一样的吗?Vector x=cccc.function(a);
    if(x是空)
    return ;
    不空:
    String b=(String)x.get(0);
    继续处理,现在是无法判断x为空
    ==>这种情况只要查size()或者isEmpty()就好了呀。
    if (!x.isEmpty())
    //process data或者:
    if (x.size() > 0)
    //process data
      

  10.   

    你的ss.add();添加了什么?不会是把整个resultset放进去了吧,如果那样的话ss肯定不会为空,(至少有一个元素是你的Resultset,尽管你的Resultset肯能是个null或空集合),除非你add的是单纯的对象,再加上你的ss是new 的,你在主调函数中加if (w ! = null)完全没有意义,这个函数functiona(String a)永远不会返回一个null;
      

  11.   

    Vector x=cccc.function(a);
    if(x是空)
    return ;
    不空:
    String b=(String)x.get(0);
    继续处理,现在是无法判断x为空-----------------------------------都已经告诉你了,判断是否为空的代码像下面这么写就可以:if (w != null && w.size() != 0) //size() == 0与isEmpty()是一回事
        System.out.println((String) w.get(0));
    else
        System.out.println("null or empty");如果换成你刚才的格式,就是
    if (x == null || x.size() == 0) {
        return;
    } else {
        String b = (String) x.get(0);
        //继续处理
    }你先测测以上代码再说。
      

  12.   

    一直没时间看java api,刚才看了一眼,可能是Vector没初始化,Vector x=cccc.function(a);这里可能有问题,应该写:Vector x=new Vector();x=cccc.function(a);这样可能抓到null结果集,否则,
    if (!x.isEmpty())
    //process data或者:
    if (x.size() > 0)
    //process data
    这样的判断都无效,我试过。
      

  13.   

    你的ss.add();添加了什么?不会是把整个resultset放进去了吧,如果那样的话ss肯定不会为空,(至少有一个元素是你的Resultset,尽管你的Resultset肯能是个null或空集合),除非你add的是单纯的对象,再加上你的ss是new 的,你在主调函数中加if (w ! = null)完全没有意义,这个函数functiona(String a)永远不会返回一个null;
    -----------------------------------------
    ss.add();
    里面是结果集中的元素.
      

  14.   

    一直没时间看java api,刚才看了一眼,可能是Vector没初始化,Vector x=cccc.function(a);这里可能有问题,应该写:Vector x=new Vector();x=cccc.function(a);这样可能抓到null结果
    集,否则,
    ==>你觉得这个初始化有用吗?if (!x.isEmpty())
    //process data或者:
    if (x.size() > 0)
    //process data
    这样的判断都无效,我试过。
      

  15.   

    我觉得搂主不清楚空和null的区别。按照你的写法,functiona()可能返回一个空的Vector,但是不会返回一个null value。如果可能的话,还是把所有的代码贴出来看看吧。
      

  16.   

    ss.add();
    里面是结果集中的元素.
    ===========================================
    建议楼主贴出此处的代码,还有,你可以去试试你函数返回后的那个vector的getSize().是不是1???如果是,那么原因科可能是while(resultset.next())之前你就进行过ss.add的操作.看一下
      

  17.   


    程序代码:
    Vector w=cpu.re_runsql(sez); if(!w.isEmpty())
    System.out.println((String)w.get(0));
    else
    System.out.println("==0");
    //执行一条sql语句,返回结果集
    //例子:sql="select distinct a from b, where ......."
    public Vector re_runsql(String a)
    {
    Vector mmr=new Vector();
    try{
    stmt=conn.createStatement();
    rs=stmt.executeQuery(a);
    while(rs.next())//没记录这里应该不执行啊,可是这里现在执行
        {
        System.out.println("eeee");
       mmr.add((String)rs.getString(1));
       }  
    }
    catch(Exception cz)
    {
    cz.printStackTrace();
    }
    finally{
    closedb();
    }
    System.out.println("here="+mmr.size());这里没有记录也是1,不解
    return mmr;
    }
    //现在的屏幕输出:
    eeee
    here=1;
    null
    //
      

  18.   

    那就是有记录,为什么不
    System.out.println(((String)rs.getString(1)));
    看看
      

  19.   

    建议你这样写
    Vector w=new Vector();
    w=cccc.functiona(String a);
    if (v.size()>0)
    {
      写你的代码
    }
      

  20.   

    System.out.println(((String)rs.getString(1)));
    ----------------------------------------------
    结果:null
      

  21.   

    baobao28(联系:[email protected]
    ----------------------------------
    你说的我试过了,无效
      

  22.   

    //执行一条sql语句,返回结果集
    //例子:sql="select distinct a from b, where ......."
    public Vector re_runsql(String a)
    {
    Vector mmr=new Vector();
    try{
    stmt=conn.createStatement();
    rs=stmt.executeQuery(a);
    while(rs.next())//没记录这里应该不执行啊,可是这里现在执行
        {
        System.out.println("eeee");
      mmr.add((String)rs.getString(1));
    ==>根据你的程序输出,这个while loop运行了一次。
    ==>为什么呢?因为rs.next()第一次是true的,也就是说rs里面是有东西的。
    ==>(String)rs.getString(1) 返回一个值,null,然后这个值被加在了Vector mmr里面,这样,mmr就不是空的了,里面有个东西,这个东西是null.
      }  
    }
    catch(Exception cz)
    {
    cz.printStackTrace();
    }
    finally{
    closedb();
    }
    System.out.println("here="+mmr.size());这里没有记录也是1,不解
    ==>上面说了,mmr里面有东西,所以size()返回1。
    return mmr;
    }
    //现在的屏幕输出:
    eeee
    here=1;
    null
    //程序代码:
    Vector w=cpu.re_runsql(sez);if(!w.isEmpty())
    System.out.println((String)w.get(0));
    else
    System.out.println("==0");==>再看这里,根据上面说的,Vector w不是空的,里面有东西,这个东西是null。
    ==>所以,w.isEmpty()返回false,w.get(0)取出w里的这个东西,返回null,所以打印出来是null。
      

  23.   

    为什么rs里面有东西呢?还要看你的query和数据库的具体情况。
      

  24.   

    回答你的问题
    1 方法返回的是NULL
    比如
    Vector resultVector = someFunction();
    if(resultVector==null){
    }
    2 Vector中的内容为空,即没有内容
    Vector resultVector = someFunction();
    if(resultVector.size()<=0){
    }
      

  25.   

    楼主的问题,其实sql语句本身的执行问题。楼主写的sql不是全部的,sql执行后,如果某一行有记录,但是该行中的某一列是“可以为null”的,并且未赋值,那么查询后,该列的返回值就是null;楼主上面的代码其实就是把null这个对象插入了vector,然后又把这个对象打印了出来;显示完全正常。
    另,判断vector空与否
    就是楼上一位兄弟说的
    if(vec == null){ //vector没有初始化}else if(vec.size() == 0){ //里面没有包含对象}
      

  26.   

    SunHome_Java(XXX)括号里的东东怎么弄谁能告诉我
      

  27.   

    System.out.println(((String)rs.getString(1)));
    ----------------------------------------------
    结果:null
    ===========================================================
    那证明你的rs.getString(1)是null,并且rs里面一定有数据。要不然rs.getString()的时候就会跑NullPointerException了
      

  28.   

    问题已经找到:
    String a="select numa,sssp from b where ......"
    这样的语句在
    while(rs.next())//没记录这里应该不执行啊,可是这里现在执行
    {
    }可以拦截,不进入循环
    String a="select sum(numa) from b where ......"
    这样的语句,拦不住,最少执行一次,不解?