奇怪问题,大家帮我分析一下.

xzp1030 2007-09-25 11:45:47
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, " +
"mark_lnth, cut_rap_lnth, mark_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语句上. 这是什么原因??,好奇怪..
...全文
496 23 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
23 条回复
切换为时间正序
请发表友善的回复…
发表回复
knight14 2008-01-17
  • 打赏
  • 举报
回复
我也遇到同样的问题了,上面说的方法都事了,结果都是,rs.next()返回false,如果把参数写死在sql里,就没问题,看来,还是传的参数问题。
ys_wangtao 2007-09-26
  • 打赏
  • 举报
回复
if(rs.hasNext()){ //这里修改
rs.next(); //这里也修改
wab30m = new WAB30MRec(); // WAB30MRec Constructor
wab30m.setDwg_no(rs.getString("dwg_no"));
.........
} else {

throw new DataNotFoundException();
lv810 2007-09-26
  • 打赏
  • 举报
回复
while(rs。next()){

}
scq2099yt 2007-09-26
  • 打赏
  • 举报
回复
apple20001998() 说的有一定的道理。
wshsm 2007-09-25
  • 打赏
  • 举报
回复
这样吧,不用prepareStatement绑定变量,先试试直接执行SQL
别忘了" where dwg_no = '' ";加引号啊
qybao 2007-09-25
  • 打赏
  • 举报
回复
程序中sql查寻前,把dwg_no和sql文都打印出来
把打印出来的sql语句拿到数据库去执行
会不会因为参数和数据库中的数据中有什么空格之类的,看上去好像字符串一样,但实际上由于有空格,所以sql文是拿不到结果的。
bushuang 2007-09-25
  • 打赏
  • 举报
回复
...
xzp1030 2007-09-25
  • 打赏
  • 举报
回复
to:wshsm() for_cyan(Cyan)

你们说的方法我都调试过了,不行的.sql语句是没有问题的.
for_cyan 2007-09-25
  • 打赏
  • 举报
回复
把sql语句打印出来,到数据库中执行一下就看出来了
可能是类型问题
xzp1030 2007-09-25
  • 打赏
  • 举报
回复
数据库中确实有数据.
wshsm 2007-09-25
  • 打赏
  • 举报
回复
把query打印出来放到数据库里面执行一下试试,如果真的都可以查询出来那就怪了
joejoe1991 2007-09-25
  • 打赏
  • 举报
回复
重说一下,刚才没有仔细看你的代码:)
rs初始的时候是指向第一条数据,如果rs为空rs.isAfterLast()为真也就是你IF里的条件应该是(!rs.isAfterLast())
next()是要移动rs的指针的,当你的查询结果只有一条的时候,肯定要执行else后面的语句
也就是说
4449DS626CNH02符合这个值的数据应该在一条以上
4449DS626CNH04符合这个值的数据只有一条
==========================================
rs初始的时候是指向第一条数据的上面。而不是指向第一条数据
apple20001998 2007-09-25
  • 打赏
  • 举报
回复
重说一下,刚才没有仔细看你的代码:)
rs初始的时候是指向第一条数据,如果rs为空rs.isAfterLast()为真也就是你IF里的条件应该是(!rs.isAfterLast())
next()是要移动rs的指针的,当你的查询结果只有一条的时候,肯定要执行else后面的语句
也就是说
4449DS626CNH02符合这个值的数据应该在一条以上
4449DS626CNH04符合这个值的数据只有一条
apple20001998 2007-09-25
  • 打赏
  • 举报
回复
在加如一条符合条件的数据,我怀疑,是最后一条的时候运行else后面的语句,和数据本身没有关系。
在循环体开始前先显示一下数据(RS.NEXT前),进入循环再显示一下数据,我怀疑RS内的第一条数据被跳过去了
qybao 2007-09-25
  • 打赏
  • 举报
回复
jdk的问题?不会吧,不管是NH04还是NH05,不都是字符串吗?难道字符串中的编码不同?但是又没有特殊字符啊
xzp1030 2007-09-25
  • 打赏
  • 举报
回复
一般是jdk的问题.这种编码后四位是从NH01开始的到NH15 其中 NH04和NH05有问题.其它的没有问题.
太奇怪了.不知能有高手解释一下这是为什么.
xzp1030 2007-09-25
  • 打赏
  • 举报
回复
是不是字符串的编码问题?
ddpie 2007-09-25
  • 打赏
  • 举报
回复
你在代码里直接硬编码查询'4449DS626CNH04'看看能不能查出来
xzp1030 2007-09-25
  • 打赏
  • 举报
回复
to:Tongates(...您在社区的昵称...)

你的方法试过了,用like还是查询不出数据来.会不会哪里有bug?
xzp1030 2007-09-25
  • 打赏
  • 举报
回复
我在pl/sql中执行:


SQL> select dwg_no from wab30m where dwg_no = '4449DS626CNH04';

DWG_NO
--------------------------------
4449DS626CNH04

能够查询出数据来呀,没有空格.要是有空格的话不会有数据的.
加载更多回复(3)

81,122

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧