2014-09-18 75 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%確定它會以最佳方式處理所有情況。