在一个应用中有这样的一行代码:
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";
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";
cccc.functiona(String a)为空时,w.size()==1?此时w.size()不是应该等于0吗?
else if (w.size() == 0) System.out.println("w is empty");
else ...
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");这么写你再测试测试,应该就是对的了。
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
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吗?
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为空
用一个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
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);
//继续处理
}你先测测以上代码再说。
if (!x.isEmpty())
//process data或者:
if (x.size() > 0)
//process data
这样的判断都无效,我试过。
-----------------------------------------
ss.add();
里面是结果集中的元素.
集,否则,
==>你觉得这个初始化有用吗?if (!x.isEmpty())
//process data或者:
if (x.size() > 0)
//process data
这样的判断都无效,我试过。
里面是结果集中的元素.
===========================================
建议楼主贴出此处的代码,还有,你可以去试试你函数返回后的那个vector的getSize().是不是1???如果是,那么原因科可能是while(resultset.next())之前你就进行过ss.add的操作.看一下
程序代码:
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
//
System.out.println(((String)rs.getString(1)));
看看
Vector w=new Vector();
w=cccc.functiona(String a);
if (v.size()>0)
{
写你的代码
}
----------------------------------------------
结果:null
----------------------------------
你说的我试过了,无效
//例子: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。
1 方法返回的是NULL
比如
Vector resultVector = someFunction();
if(resultVector==null){
}
2 Vector中的内容为空,即没有内容
Vector resultVector = someFunction();
if(resultVector.size()<=0){
}
另,判断vector空与否
就是楼上一位兄弟说的
if(vec == null){ //vector没有初始化}else if(vec.size() == 0){ //里面没有包含对象}
----------------------------------------------
结果:null
===========================================================
那证明你的rs.getString(1)是null,并且rs里面一定有数据。要不然rs.getString()的时候就会跑NullPointerException了
String a="select numa,sssp from b where ......"
这样的语句在
while(rs.next())//没记录这里应该不执行啊,可是这里现在执行
{
}可以拦截,不进入循环
String a="select sum(numa) from b where ......"
这样的语句,拦不住,最少执行一次,不解?