public WAB30MRec select(String dwg_no) throws Exception{
WAB30MRec wab30m = null;
    PreparedStatement pstmt = null;
    ResultSet rs = null;
    try{
        String query = "Select dwg_no, cut_bay_no, cut_mch_code, cut_pln_date, cut_adjt_dur, cary_due_date, wv_uom, mtl_mat_grd, stl_thck_1, " +
                              "stl_thck_2, stl_bdth_1, stl_bdth_2, stl_lnth, stl_cgrt, stl_qty, cut_req_qty, btch_cnt, cut_lnth, " +
                              "_lnth, cut_rap_lnth, _rap_lnth, pln_week_no, pln_cnfm_indc, std_mh, rgsr_emp_no, rgsr_date, rgsr_time, " +
                              "mnt_emp_no, mnt_date, mnt_time " +
                       "  from HP.WAB30M  " +
                       "  where dwg_no = ?  ";
        pstmt = connection.prepareStatement(query);
        pstmt.setString(1,dwg_no); 
        rs = pstmt.executeQuery();        if(rs.next()){
            wab30m = new WAB30MRec(); // WAB30MRec Constructor
                     wab30m.setDwg_no(rs.getString("dwg_no"));
                     .........
        } else {
 
            throw new DataNotFoundException();
        } // end if
    } finally {
        try{rs.close();}catch(Exception e){}
        try{pstmt.close();}catch(Exception e){}
    } // try-finally
    return wab30m;
}==============================
数据库中dwg_no值 : 4449DS626CNH02   4449DS626CNH04 这两个值都存在
当调用这个函数时,参数为4449DS626CNH02 时. 执行到if(rs.next())时可以继续往下执行,当参数值为4449DS626CNH04 时, 执行到if(rs.next())时就会直接跳到else语句上.  这是什么原因??,好奇怪..

解决方案 »

  1.   

    把query打印出来放到数据库里面执行一下试试,如果真的都可以查询出来那就怪了
      

  2.   

    把sql语句打印出来,到数据库中执行一下就看出来了
    可能是类型问题
      

  3.   

    to:wshsm() for_cyan(Cyan)你们说的方法我都调试过了,不行的.sql语句是没有问题的.
      

  4.   

    程序中sql查寻前,把dwg_no和sql文都打印出来
    把打印出来的sql语句拿到数据库去执行
    会不会因为参数和数据库中的数据中有什么空格之类的,看上去好像字符串一样,但实际上由于有空格,所以sql文是拿不到结果的。
      

  5.   

    这样吧,不用prepareStatement绑定变量,先试试直接执行SQL
    别忘了"  where dwg_no = ''  ";加引号啊
      

  6.   

    to:qybao(阿宝) wshsm() 你们说的方法我在发贴子之前都试过了.不行.不是空格造成的问题.我where语句改成这样的方试也不行"  where dwg_no = ' + dwg_no + "'  ";等待中.
      

  7.   

    数据库中的数据有空格感觉.
    建议:
    1)"  where dwg_no = ?  ";改为"  where dwg_no like ?  ";
    2)pstmt.setString(1,dwg_no.trim()+"%");这样试一试.
      

  8.   

    与Tongates(...您在社区的昵称...)  同感^o^
      

  9.   

    我在pl/sql中执行:
    SQL> select dwg_no from wab30m where dwg_no = '4449DS626CNH04';DWG_NO
    --------------------------------
    4449DS626CNH04能够查询出数据来呀,没有空格.要是有空格的话不会有数据的.
      

  10.   

    to:Tongates(...您在社区的昵称...) 你的方法试过了,用like还是查询不出数据来.会不会哪里有bug?
      

  11.   

    你在代码里直接硬编码查询'4449DS626CNH04'看看能不能查出来
      

  12.   

    一般是jdk的问题.这种编码后四位是从NH01开始的到NH15 其中 NH04和NH05有问题.其它的没有问题.
    太奇怪了.不知能有高手解释一下这是为什么.
      

  13.   

    jdk的问题?不会吧,不管是NH04还是NH05,不都是字符串吗?难道字符串中的编码不同?但是又没有特殊字符啊
      

  14.   

    在加如一条符合条件的数据,我怀疑,是最后一条的时候运行else后面的语句,和数据本身没有关系。
    在循环体开始前先显示一下数据(RS.NEXT前),进入循环再显示一下数据,我怀疑RS内的第一条数据被跳过去了
      

  15.   

    重说一下,刚才没有仔细看你的代码:)
    rs初始的时候是指向第一条数据,如果rs为空rs.isAfterLast()为真也就是你IF里的条件应该是(!rs.isAfterLast())
    next()是要移动rs的指针的,当你的查询结果只有一条的时候,肯定要执行else后面的语句
    也就是说
    4449DS626CNH02符合这个值的数据应该在一条以上
    4449DS626CNH04符合这个值的数据只有一条
      

  16.   

    重说一下,刚才没有仔细看你的代码:)
    rs初始的时候是指向第一条数据,如果rs为空rs.isAfterLast()为真也就是你IF里的条件应该是(!rs.isAfterLast())
    next()是要移动rs的指针的,当你的查询结果只有一条的时候,肯定要执行else后面的语句
    也就是说
    4449DS626CNH02符合这个值的数据应该在一条以上
    4449DS626CNH04符合这个值的数据只有一条
    ==========================================
    rs初始的时候是指向第一条数据的上面。而不是指向第一条数据
      

  17.   

    if(rs.hasNext()){  //这里修改
                rs.next();     //这里也修改
                wab30m = new WAB30MRec(); // WAB30MRec Constructor
                         wab30m.setDwg_no(rs.getString("dwg_no"));
                         .........
            } else {
     
                throw new DataNotFoundException();
      

  18.   

    apple20001998() 说的有一定的道理。
      

  19.   

    我也遇到同样的问题了,上面说的方法都事了,结果都是,rs.next()返回false,如果把参数写死在sql里,就没问题,看来,还是传的参数问题。