注册 登录
编程论坛 J2EE论坛

[分享][经验]记录集中使用do..while

支离破碎 发布于 2007-03-30 13:07, 769 次点击
do..while这个句语已经N久没用过了,没想到今天却在操作记录集的时候用上了。

原因如下:查询一个ID,这个ID如果不存在这张表中则给此对象初始化。因为用的是JBDC的连接方式,所以判断一个记录存不存在用到了if(rs.next()),如果按以前的方式就是直接用if(rs.next())来做,查到了就取,查不到初始化。就像这样:


if(rs.next()){
   while(rs.next()){
        ......
    }

}else{

   初始化
}


但是由于if的时候记录集指针下移,所以查出的数据就会少一个。

因此改用do..while来处理。

希望大家不要忘了do..while的用处。。


/**
     * get Adviser PI
     * @param con
     * @param pstmt
     * @param rs
     * @param adviserID
     * @return
     * @throws SQLException
     */
    private List getAdviserAPI(Connection con,PreparedStatement pstmt,ResultSet rs,String adviserID) throws DataException{
        List piontInfoTOApi = new ArrayList();
        try
        {
            pstmt = con.prepareStatement(SystemConstants.SQL_SEL_AGENTS_PERFORMANCE_API);
            pstmt.setString(1,adviserID);
            rs = pstmt.executeQuery();   
            if(rs.next()){
                do{
                    PointInfoTO pointInfoTO = new PointInfoTO();
                    pointInfoTO.setYApi(rs.getString(\"ANNUALISED_PREMIUM\"));
                    piontInfoTOApi.add(pointInfoTO);
                } while (rs.next());
            }else{
                PointInfoTO pointInfoTO = new PointInfoTO();
                pointInfoTO.setYApi(SystemConstants.DEFAULT_VAR_ZERO);
                piontInfoTOApi.add(pointInfoTO);
            }
        }
         catch (SQLException e)
        {
             throw new DataException();
        }
        return piontInfoTOApi;
    }



[此贴子已经被作者于2007-3-30 13:09:17编辑过]

9 回复
#2
千里冰封2007-03-30 14:41
呵呵,其实你可以去掉if啊,不就可以直接做成

boolean hasNext=false
while(rs.next){

hasNext=true;
}
if(hasNext){}else{}
#3
angeloc2007-03-30 15:23
以下是引用千里冰封在2007-3-30 14:41:27的发言:
呵呵,其实你可以去掉if啊,不就可以直接做成

boolean hasNext=false
while(rs.next){

hasNext=true;
}
if(hasNext){}else{}

是啊

#4
支离破碎2007-03-30 15:41
当时也没想到这么多了呵,
#5
angeloc2007-03-30 15:47

下次就知道了

#6
menzi_love2007-03-30 15:51

走哪个循环要杀死多少脑细胞阿?
呵呵!以后可要记住了!

#7
黄袖标2007-03-30 16:51
bz的提醒很好,但是只要知道rs.next的动作的人,一般都不会丢数据,而且至于是什么do while啊什么的,不用那么死板,只要能满足需求,实现功能就行了。
如果怕少一条数据的话么,可以调试的时候把count(*) 打出来,帮助我们看是不是少了一条数据。顺便复习。。。
#8
ILoveMK2007-03-30 18:22
请问楼上bz是什么意思?
#9
ILoveMK2007-03-30 18:23
哦,知道了,是斑竹的简写,我真是笨啊,呵呵。。。
#10
支离破碎2007-03-30 18:26
楼上的。。。。。
1