得到这个sql(排名之间的选择):
//Variables come from outside or other classes etc...
"SELECT * from users where dept_name= ? AND birth_date >=? AND birth_date <=? AND money >=? AND money <=?;
//Long preparedStatement code...
使用下一个代码将dept_name传递给sql:
System.out.println("Insert department name: ");
Scanner alpha = new Scanner(System.in);
String dept_name= alpha.nextLine();
如果我没有在扫描仪上插入任何东西,我只需按回车键会怎样?就像我想跳过dept_name的搜索一样,我只想在birth_date和money rank之间进行搜索?
我该如何处理:
pstmt.setString(1, users.getDeptname()); //prepared statement
如果先前在dept_id上收到“enter”字符?
Oracle如何忽略dept_name =?如果“?”中没有传递英勇使用预准备语句并使用SQL中的下一个字段继续查询?
答案 0 :(得分:1)
您可以将查询修改为
SELECT * FROM users
WHERE (dept_name = ? OR ? IS NULL) AND .....
然后在代码中设置pstmt.setString(1, dept_name); pstmt.setString(2,dept_name);
然而,我宁愿有多个陈述,然后是一个适合所有的陈述。任何通用方法的问题在于性能。优化器无法生成良好的执行计划。例如,如果设置了username,则基础索引的范围/唯一扫描肯定优于全表扫描。尽管Oracle 11及更高版本具有绑定感知等很好的功能,但我并不是100%确定它会以最佳方式处理所有情况。