得到这个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 键,会发生什么情况?就像我想跳过按部门名称搜索而只想在出生日期和金钱排名之间搜索一样?
我该如何处理:
pstmt.setString(1, users.getDeptname()); //prepared statement
如果之前在 dept_id 上收到了“enter”字符?
Oracle 如何忽略 dept_name =?如果“?”中没有传递勇气使用准备好的语句并使用 SQL 中的下一个字段继续查询?
最佳答案
您可以将查询修改为类似
SELECT * FROM users
WHERE (dept_name = ? OR ? IS NULL) AND .....
然后在代码中设置 pstmt.setString(1, dept_name); pstmt.setString(2,部门名称);
但是,我宁愿有多个陈述,也不愿有一个适合所有情况的陈述。任何通用方法的问题都是性能。优化器将无法生成良好的执行计划。例如,如果设置了用户名,则基础索引的范围/唯一扫描肯定优于全表扫描。尽管 Oracle 11 及更高版本具有绑定(bind)感知等出色功能,但我不能 100% 确定它会以最佳方式处理所有情况。
关于java - Oracle SQL 查询不带所有参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25918889/