ITPUB??ì3
ITPUB论坛 » Java企业开发 » 如何判断结果集为空

新一届的微软MVP评选已经开始,欢迎各位推荐!

标题: 如何判断结果集为空
离线 spawnyy
初级会员



精华贴数 0
个人空间 0
技术积分 78 (19990)
社区积分 0 (530272)
注册日期 2005-7-24
论坛徽章:0
      
      

发表于 2006-8-26 12:18 
如何判断结果集为空

我用servlet往bean传入一个sql语句,如何再serlvet中判断结果集是否为空。
这是servlet代码
////////////////////////////////////////////////////////////////
  public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    response.setContentType(CONTENT_TYPE);
    HttpSession session = request.getSession(true);
    PrintWriter out = response.getWriter();
    String search = request.getParameter("search";
    String sql = "select title from titles where title_id in(select title_id from titleauthor where au_id in(select au_id from authors where au_lname="+"'"+search+"'"+")";
    try {
      List l = new DbConnection().search(sql);
      session.setAttribute("list",l);
      RequestDispatcher rd = request.getRequestDispatcher("/index.jsp";
      rd.forward(request,response);
    }
    catch (Exception ex) {
      ex.printStackTrace();
    }
  }

这是bean中的代码
/////////////////////////////////////////////////
  public List search(String sql) throws Exception{
    System.out.println(sql);
    ArrayList al = new ArrayList();
    ps = con.prepareStatement(sql);
    rs = ps.executeQuery();
    while(rs.next()){
      DataBean db = new DataBean();
      db.setTitle(rs.getString("title");
      al.add(db);
    }
    return al;
  }


只看该作者    顶部
离线 carniege
冥王星酋长


精华贴数 0
个人空间 250
技术积分 20765 (44)
社区积分 13225 (112)
注册日期 2003-12-19
论坛徽章:83
现任管理团队成员开发板块每日发贴之星开发板块每日发贴之星2008年新春纪念徽章  
      

发表于 2006-8-26 13:50 
if(resultset.next())可以判断


__________________
兰叶春葳蕤,桂华秋皎洁。
欣欣此生意,自尔为佳节。
谁知林栖者,闻风坐相悦。
草木有本心,何求美人折。
只看该作者    顶部
离线 iooyoo
迷眼流金


精华贴数 0
个人空间 20
技术积分 4220 (333)
社区积分 3501 (386)
注册日期 2006-6-15
论坛徽章:22
现任管理团队成员2008北京奥运纪念徽章:皮划艇激流回旋2008北京奥运纪念徽章:举重2008年新春纪念徽章  
      

发表于 2006-8-27 00:29 


QUOTE:
最初由 carniege 发布
if(resultset.next())可以判断



ps:楼上的签名好pp~~


__________________

使君欲醉离亭酒
酒醒离愁转有
紫禁多时虚右
苕霄留难久
一声歌掩双罗袖
日落乱山春后
犹有东城烟柳
青荫长依旧
只看该作者    顶部
离线 lillikut
初级会员



精华贴数 0
个人空间 0
技术积分 18 (59700)
社区积分 0 (1086158)
注册日期 2006-8-26
论坛徽章:0
      
      

发表于 2006-8-27 06:43 
结果确认是非常重要的, 它可一占到80%的代码量.

LZ在BEAN中使用了THROWS EXCEPTION的方法, 使得SERVLET可以捕捉到BEAN内出现的异常, 并加以处理. 如果系统能检测到结果集为空的状况并做处理那就很完美了.

这里面实际上有两个问题, 一个是在BEAN中如何检测到结果集为空的状态, 另一个是, BEAN如何将该状态通知SERVLET

先看看应该检测的状态,
- 取得结果集rs之后应当立即检测 rs是否为NULL, rs一旦为空则处理便无法继续下去了. 造成rs为空的原因是无法预计的, 因为正常状态下rs不可能为空.

- 结果集rs之中不含有结果, 也就是数据不存在. 它可能是错误, 也可能是正常的结果, 这要根据处理逻辑来判断. 检测方法, 可以看看al的长度是否为0.

在看看通知方法
BEAN返回的结果是一个List , 结果集为空和没有结果的两个不同的状态都返回一个不含元素空List. 于是SERVLET就无法判断BEAN的状态了. 针对这个问题可以, 让函数返回NULL,当rs==NULL的时候, 这样SERVLET就可以区分这两个状态了.

下面是修改方案的例子
PHP code:


////////////////////////////////////////////////////////////////

public void doGet(HttpServletRequest requestHttpServletResponse response

    
throws ServletExceptionIOException {

    
response.setContentType(CONTENT_TYPE);

    
HttpSession session request.getSession(true);

    
PrintWriter out response.getWriter();

    
String search request.getParameter(&quot;search&quot<img src="images/smilies/23.gif" smilieid="206" border="0" alt="" />;

    
String sql = &quot;select title from titles where title_id 

            in
(select title_id from titleauthor where au_id in(select au_id from authors 

            where au_lname
=&quot;+&quot;'&quot;+search+&quot;'&quot;+&quot<img src="images/smilies/23.gif" smilieid="206" border="0" alt="" />)&quot;;

    try {

        List 
= new DbConnection().search(sql);

        if (
l==nulldosomething1(); //结果集为空时的处理

        
if (l.size()<=0dosomething(); //没有结果时的处理

        
session.setAttribute(&quot;list&quot;,l);

        
RequestDispatcher rd request.getRequestDispatcher(&quot;/index.jsp&quot<img src="images/smilies/23.gif" smilieid="206" border="0" alt="" />;

        
rd.forward(request,response);

    }

    catch (
Exception ex) {

        
ex.printStackTrace();

    }

}



/////////////////////////////////////////////////

public List search(String sqlthrows Exception{

    
System.out.println(sql);

    
ArrayList al null//al 的初始状态为null, 如果程序意外中断, al将保持null状态

    
ps con.prepareStatement(sql);

    
rs ps.executeQuery();

    if (
rs!=nullal= new ArrayList();    //结果集被正常返回, 

                      //但还没有确认结果, 

                    //把al设成空的ArrayList刚好反映了当前的状况

    
while(rs.next()){

    
DataBean db = new DataBean();

    
db.setTitle(rs.getString(&quot;title&quot<img src="images/smilies/23.gif" smilieid="206" border="0" alt="" />);

    
al.add(db);

    
//注意!!! 没有关闭结果集!!!

}

return 
al;

}




__________________
生活中几乎找不到网页上一个十分有效的后退健,我们是不是只好点击一次“QUIT”?
只看该作者    顶部
 
    

相关内容


CopyRight 1999-2006 itpub.net All Right Reserved.
北京皓辰广域网络信息技术有限公司. 版权所有
E-mail:Webmaster@itpub.net
京ICP证:010037号 联系我们 法律顾问