我也认为应该从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+"'"个人见解,如果错误,请各位大侠指正!
改成 pstmt.setString(0, "to_char(r_date,'yyyy-mm-dd') between "+r_date+" and "+r_sDate);还是不对,郁闷了
晕,不知道楼上怎么回答的,这怎么可能对,用?号就不行,除非改成拼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字段, 它不会把它当做表的字段,而是普通的一个字符串而已。
pstmt.setInt(4, end); 改为1,2 运行正确
其次,?占位符会被字符串纯替换,建议改为r_date between ? and ?
错是在你的那个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错误。应该也类此。
还是不对呢 --
pstmt.setString(0, "to_char(r_date,'yyyy-mm-dd') between "+r_date+" and "+r_sDate);还是不对,郁闷了
它不会把它当做表的字段,而是普通的一个字符串而已。