日期:2014-05-19  浏览次数:20719 次

JDBC的奇怪问题,宗师请进
小弟浸淫JDBC也有三四年了,自信虽不能说精通,但总还是会使用jdbc操作数据库的。
可是今天有这么段代码代码,让我郁闷了,虽然问题解决的,但不知所以然,因此贴出代码,供宗师们参详,
还望知道原因的宗师们给指点下。

  PreparedStatement pst=null;
  ResultSet rs=null;
  String sql=null;
  PremSumInfoModel pPremSumInfoModel=null;
  try{
  sql="select * from TMS_PREM_SUM_INFO a where a.PREM_SUM_INFO_ID=" +
  "(select max(t.PREM_SUM_INFO_ID) from TMS_PREM_SUM_INFO t where t.apply_id = ? and t.status in (0,1,2))";
  pst=con.prepareStatement(sql);
  pst.setString(1,apply_id);
  rs=pst.executeQuery();
  if(rs.next()){
  pPremSumInfoModel=wrapModel(rs);
  }

  。。。。。。。。

声明一下:后台数据里有数据,在pl/sql执行,能够查询出结果,后台数据的status=2。
但是JDBC执行到rs.next()的时候,debug获得rs.next()=false;

之后修改代码,查资料,都木有解决。
之后偶然把sql中“and t.status in (0,1,2)”去掉,竟然OK了;
之后又把sql中“and t.status in (0,1,2)”改为“and t.status not in (3,4)”(说明:status只有0、1、2、3、4五个码值)竟然也OK了。

此时此景,我愤怒了!

这到底是为什么?




------解决方案--------------------
如果
and t.status in (0,1,2)
改成
and (t.status = 0 or t.status = 1 or t.status = 2)

------解决方案--------------------
if(rs.next()){
pPremSumInfoModel=wrapModel(rs);
}


改成 
 while (rs.next()){
pPremSumInfoModel=wrapModel(rs);
}

------解决方案--------------------
人品问题
------解决方案--------------------
菜鸟帮顶