本帖最后由 wyh7589956 于 2012-04-05 10:03:09 编辑

解决方案 »

  1.   

    1也是正确的,去掉1,2占位符 及条件 将pstmt.setInt(3, start);
    pstmt.setInt(4, end);   改为1,2 运行正确
      

  2.   

    首先你的分页SQL不是性能最好的,去百度收索一下高性能分页SQL的写法;
    其次,?占位符会被字符串纯替换,建议改为r_date between ? and ?
      

  3.   

    刚开始我也是r_date between ? and ?  但是因为两个时间可取空值,所以整合到一起了改成0开始提示错误,无效的列索引
      

  4.   

    开始位是从1开始没有错。
    错是在你的那个sql拼接不对。
    " r.r_date between"+" to_date("+r_date+",yyyy-mm-dd)"+" and "+" to_date("+r_sDate+",yyyy-mm-dd) "
    这句不正确。
    具体点就是 to_date()用法不对。to_date('string','yyyy-mm-dd');
    这里的单引号,不能丢了。
    对于你的2错误。应该也类此。
      

  5.   

     pstmt.setString(0, " r.r_date between"+" to_date("+"'"+r_date+"'"+",'yyyy-mm-dd')"+" and "+" to_date("+"'"+r_sDate+"'"+",'yyyy-mm-dd') ");
    还是不对呢 -- 
      

  6.   

    我也认为应该从0开始,to_date("+r_date+",yyyy-mm-dd)应该为to_date(‘"+r_date+"’,yyyy-mm-dd),再者" r.R_STATE LIKE "+r_state 应该为" r.R_STATE LIKE '"+r_state+"'"个人见解,如果错误,请各位大侠指正!
      

  7.   

    改成
    pstmt.setString(0, "to_char(r_date,'yyyy-mm-dd') between "+r_date+" and "+r_sDate);还是不对,郁闷了
      

  8.   

    晕,不知道楼上怎么回答的,这怎么可能对,用?号就不行,除非改成拼sql的办法。首先setString的索引是从1开始的,不是0.当然问题不在这个,是因为?号,比如" r.R_STATE LIKE "+r_state解析完是 r.R_STATE LIKE 123这是sql变成WHERE o.ROOM_ID=r.ROOM_ID AND 'r.R_STATE LIKE 123'注意,它把你传的值都作为字符串来处理了,包括你想当然的r.R_STATE字段,
    它不会把它当做表的字段,而是普通的一个字符串而已。
      

  9.   

    我劝楼主用PreparedStatement 吧简单,而且不用拼字符串