2014-09-18 32 views
0

得到这个SQL(等级之间选择)的Oracle 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(); 

如果我不这么做,会发生什么在扫描仪上插入任何东西,我只需按Enter键?就像我想跳过dept_name的搜索一样,我只想在birth_date和money等级之间搜索?

我该如何处理:

pstmt.setString(1, users.getDeptname()); //prepared statement 

如果它以前收到了“输入”作为对的dept_id人物?

Oracle如何忽略dept_name =?如果没有勇气通过“?”准备好声明并使用SQL中的下一个字段继续查询?

回答

1

您可以修改查询到类似

SELECT * FROM users 
WHERE (dept_name = ? OR ? IS NULL) AND ..... 

然后在你的代码设置pstmt.setString(1, dept_name); pstmt.setString(2,dept_name);

不过,我宁愿多条语句,然后一个适合所有。任何通用方法的问题都是性能。优化器将无法生成良好的执行计划。例如,如果设置了用户名,基本索引的范围/唯一扫描绝对比全表扫描更可取。尽管Oracle 11及更高版本具有绑定感知等很好的功能,但我不能100%确定它会以最佳方式处理所有情况。